如何在提交http请求之前注入firefox Web扩展的js

时间:2019-02-15 18:53:16

标签: javascript python-3.x firefox selenium-webdriver firefox-webextensions

我正在研究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。

0 个答案:

没有答案