Как внедрить js веб-расширения firefox перед отправкой http-запроса - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю над сценарием python selenium 3 для захвата HAR с помощью веб-драйвера Firefox.Версия Firefox - 65.0.1.Чтобы экспортировать HAR из Firefox, я использую расширение 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"
    }
  ]

мой вызов js от python (работает, если страница загружена):

# 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

Моя цельввести JS перед http запросом.Поэтому экспорт HAR возможен, если браузеру не удалось выполнить рендеринг из-за проблем с подключением / доступностью.Я не очень знаком с js, может быть, поэтому я пока не могу понять.

Я знаю, что я мог бы сделать это с HAR-прокси, однако желательно, чтобы HAR экспортировался из браузера.

...