Сообщение «Не удалось декодировать ответ от марионетки» в скрипте безголовой очистки Python/FirefoxPython

Программы на Python
Ответить
Anonymous
 Сообщение «Не удалось декодировать ответ от марионетки» в скрипте безголовой очистки Python/Firefox

Сообщение Anonymous »

Добрый день, я выполнил несколько поисковых запросов здесь и в Google, но так и не нашел решения, позволяющего решить эту проблему.

Сценарий таков:

У меня есть скрипт Python (2.7), который циклически перебирает несколько URL-адресов (например, страницы Amazon, очистка обзоров). Каждая страница имеет один и тот же макет HTML, просто собирая разную информацию. Я использую Selenium с безголовым браузером, поскольку на этих страницах есть JavaScript, который необходимо выполнить для получения информации.

Я запускаю этот сценарий на своем локальном компьютере (OSX 10.10). Firefox — последняя версия v59. Selenium имеет версию 3.11.0 и использует geckodriver v0.20.

У этого сценария локально нет проблем, он может без проблем проходить все URL-адреса и очищать страницы.

Теперь, когда я помещаю сценарий на свой сервер, единственное отличие состоит в том, что это Ubuntu 16.04 (32-разрядная версия). Я использую соответствующий драйвер geckodriver (все еще v0.20), но все остальное то же самое (Python 2.7, Selenium 3.11). Кажется, что это случайно приводит к сбою безголового браузера, после чего весь браузерObjt.get('url...') больше не работает.

В сообщениях об ошибках говорится:


Сообщение: не удалось декодировать ответ от марионетки


Любые дальнейшие запросы селена для страниц возвращают ошибку:


Сообщение: попыталась выполнить команду без установления соединения




Чтобы показать код:

Когда я создаю драйвер:

Код: Выделить всё

    options = Options()
options.set_headless(headless=True)

driver = webdriver.Firefox(
firefox_options=options,
executable_path=config.GECKODRIVER
)
передается функции скрипта в качестве параметра BrowseObj, который затем используется для вызова определенных страниц, а затем после загрузки передается в BeautifulSoup для анализа:

Код: Выделить всё

browserObj.get(url)

soup = BeautifulSoup(browserObj.page_source, 'lxml')


Ошибка может указывать на строку BeautifulSoup, которая приводит к сбою браузера.

Что может быть причиной этого и что я могу сделать, чтобы решить проблему?



Изменить: добавление трассировки стека, которая указывает на то же самое:

Код: Выделить всё

Traceback (most recent call last):
File "main.py", line 164, in 
getLeague
File "/home/ps/dataparsing/XXX/yyy.py", line 48, in BBB
soup = BeautifulSoup(browserObj.page_source, 'lxml')
File "/home/ps/AAA/projenv/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 670, in page_source
return self.execute(Command.GET_PAGE_SOURCE)['value']
File "/home/ps/AAA/projenv/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
self.error_handler.check_response(response)
File "/home/ps/AAA/projenv/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
WebDriverException: Message: Failed to decode response from marionette


Примечание. Раньше этот скрипт работал с Chrome. Поскольку сервер является 32-битным, я могу использовать только chromedriver v0.33, который поддерживает только Chrome v60-62. В настоящее время Chrome имеет версию 65, и в DigitalOcean у меня, похоже, нет простого способа вернуться к старой версии, поэтому я остановился на Firefox.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»