早上好 我尝试使用chrome扩展或usercript来删除脚本,然后再执行它。 我试过了
chrome.tabs.onUpdated.addListener(function(tabid, info, tab) {
chrome.tabs.executeScript(tabid, {file:"test.js"});
//if (info.status == "complete") {
//
// }
});
在test.js中,我删除了第一个脚本元素(仅用于示例)
document.body.querySelectorAll('*')[0].remove()
即使第一次调用test.js已经太晚了,页面内的脚本已经被执行了。 有没有办法在解释之前替换HTML或在执行之前删除脚本?
我还尝试了"run_at": "document_start"
用户脚本,但脚本在我要删除的脚本加载到dom之前运行,因此我无法将其删除。
在过去,有可能使用beforeload事件,但它已从chrome中删除。
我还尝试了chrome.runtime.onMessage.addListener
和chrome.webRequest.onBeforeRequest.addListener
,但是当我重新加载页面时它们没有被触发。
谢谢
答案 0 :(得分:0)
最后,我使用mitmproxy而不是扩展名,这是一个允许修改内容的代理。
安装mitmproxy:
sudo apt install pip
pip3 install beautifulsoup4
#pip3 uninstall mitmproxy #uncomment if already installed
sudo pip3 install mitmproxy==3.0.4
sudo sysctl -w net.ipv4.ip_forward=1 #maybe facultative
创建一个名为insertJs.py的python修饰符脚本:
以下脚本将在包含$('html, body').animate({".encode('utf-8')
;[].push({".encode('utf-8')
替换tfarjo
def response(flow):
if 'tfarjo' in flow.request.url: #here filter url that you want modify
#here make the replacement you want
flow.response.content = flow.response.content.replace(
"$('html, body').animate({".encode('utf-8'),
";[].push({".encode('utf-8')
)
def read_file(filename):
with open(filename) as f:
return f.read()
使用修饰符脚本启动mitmproxy:
sudo mitmdump -p 8081 -s "insertJs.py"
kill chrome:file - >退出或“killall chrome
”两次
现在我们必须配置代理,创建一个添加mitmproxy的chrome shorcut(在Linux上,它在桌面上是正确的clic并创建新的启动器):
/usr/bin/google-chrome-stable %U --proxy-server=127.0.0.1:8081
尝试使用http页面而不是https,如果可以,请配置https:
对于铬 做同样的事情并安装pem(可能是兼性的) 然后按照这些说明https://superuser.com/questions/1083766/how-do-i-deal-with-neterr-cert-authority-invalid-in-chrome#answer-1083768
(对于firefox,只需点击你的操作系统就可以了,并且配置了https)