我正在研究python硒3脚本,以使用Firefox Webdriver捕获HAR。 Firefox版本为65.0.1。 要从Firefox导出HAR,我使用HARExportTrigger扩展。 HARExportTrigger:https://github.com/firefox-devtools/har-export-trigger 目标服务器响应该请求后,我的脚本可以正常工作。 但是,如果站点无法访问(例如网关超时或不可用),则不会加载扩展的“ content_scripts”,“ web_accessible_resources”。该脚本无法执行js方法来导出HAR。
我试图修改扩展清单,将“ run_at”设置为“ document_start”,但是即使可以加载目标URL,也会破坏扩展。
我尝试将devtool.js的端口更改为,将content.js从chrome.runtime.connect
更改为chrome.tabs.connect
也会破坏扩展名。
试图添加“ run_at”:
"content_scripts": [
{
"all_frames": true,
"matches": [
"<all_urls>"
],
"js": [
"src/content.js"
],
"run_at": "document_start"
}
]
我从python进行的js调用(如果加载了页面,则可以正常工作):
# js statement for HAR Trigger add on
HAR_HARVEST = "myString = HAR.triggerExport().then(" \
"harLog => {return JSON.stringify(harLog);});" \
"return myString;"
har_dict['log'] = ast.literal_eval(browser.execute_script(HAR_HARVEST))
无法访问目标页面时的异常:
File "/Users/Tempo/PycharmProjects/SeleniumTest/TimeOutTest.py", line 51, in <module>
har_dict['log'] = ast.literal_eval(browser.execute_script(HAR_HARVEST))
File "/Users/Tempo/PycharmProjects/SeleniumTest/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 636, in execute_script
'args': converted_args})['value']
File "/Users/Tempo/PycharmProjects/SeleniumTest/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/Users/Tempo/PycharmProjects/SeleniumTest/venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: ReferenceError: HAR is not defined
我的目标是在http请求之前注入js。因此,如果由于连接/可用性问题导致浏览器渲染失败,则可以导出HAR。我对js不太熟悉,也许这就是为什么我无法弄清楚的原因。
我知道我可以使用HAR代理完成此操作,但是最好从浏览器中导出HAR。