我通过selenium webdriver(在chromedriver上)向网站注入大量的javascript代码。
虽然我使用的方法大部分时间都有效,但是当加载iframe或网页的javascript代码重新加载页面时,它会失败。
我可以从chromedriver的日志中追踪问题。 例如:
[6.203][DEBUG]: DEVTOOLS EVENT Runtime.executionContextDestroyed {
"executionContextId": 1
}
[6.203][DEBUG]: DEVTOOLS EVENT Runtime.executionContextsCleared {
}
[6.203][DEBUG]: DEVTOOLS EVENT Runtime.executionContextCreated {
"context": {
"auxData": {
"frameId": "274.1",
"isDefault": true
},
"id": 5,
"name": "",
"origin": "https://<some url>"
}
}
当我看到executionContextDestroyed
我知道这一点时,很可能我的注入脚本也被破坏了。我尝试了很多选项,如switch_to.default_content()
或switch_to.parent_frame
,但它们没有帮助,因为在重新加载但重新注入脚本时无所事事。
我的问题是,有没有办法挂钩executionContextCreated
事件,所以我可以一次又一次地将我的脚本/函数注入上下文。