Отключение javascript с помощью htmlunit через удаленный веб-драйвер

При получении страницы с селеном из скрипта python, используя htmlunit через удаленный веб-драйвер, я получаю эту ошибку:

WebDriverException: Сообщение: u'TypeError: Не удается найти функцию addEventListener в объекте [объект HTMLDocument]. (https://xxx.xxx.com/static/js/jquery-2.0.3.min.js#4)

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

Я попытался установить требуемые_возможности с помощью webdriver.DesiredCapabilities.HTMLUNIT (по сравнению с HTMLUNITWITHJS), но ничего не изменилось. Поэтому я попытался определить возможности вручную, но это не помогло.

Вот несколько примеров того, что я сделал, с результатами:

In [45]: driver = webdriver.Remote(desired_capabilities=webdriver.DesiredCapabilities.HTMLUNIT)

In [46]: driver.desired_capabilities
Out[46]:
{u'browserName': u'htmlunit',
 u'cssSelectorsEnabled': True,
 u'javascriptEnabled': True,
 u'platform': u'LINUX',
 u'version': None,
 u'webdriver.remote.sessionid': u'3aa1c9c0-9d85-4e22-ad2b-1116950cf86d'}

In [47]: driver = webdriver.Remote(desired_capabilities={'browserName': 'htmlunit', 'javascriptEnabled': False, 'platform': 'ANY', 'version': ''})

In [48]: driver.desired_capabilities
Out[48]:
{u'browserName': u'htmlunit',
 u'cssSelectorsEnabled': True,
 u'javascriptEnabled': True,
 u'platform': u'LINUX',
 u'version': None,
 u'webdriver.remote.sessionid': u'426aef71-2b7c-45c5-9313-c3dbbec07c7f'}

И вот я здесь. Если у кого-то есть идеи... :)


person Flo    schedule 22.08.2014    source источник


Ответы (1)


Частичные ответы на случай, если кто-то еще столкнется с такой же проблемой:

1/Посмотрев журналы сервера, кажется, что мои инструкции относительно настройки javascriptEnabled фактически учитываются сервером селена. Словарь требуемых_возможностей, отображаемый клиентом, не имеет значения.

15:21:35.575 INFO - Executing: [new session: Capabilities [{platform=ANY,  javascriptEnabled=false, browserName=htmlunit, version=}]])
15:21:35.576 INFO - Creating a new session for Capabilities [{platform=ANY, javascriptEnabled=false, browserName=htmlunit, version=}]
15:21:35.590 INFO - Done: [new session: Capabilities [{platform=ANY, javascriptEnabled=false, browserName=htmlunit, version=}]]

2/ Читая эту дискуссию, я понял, что то, что я ожидал от параметра javascriptEnabled это не то, для чего он предназначен. Это не отключает выполнение javascript в браузере, а «внедрение» javascript из клиентского скрипта.

Отключение выполнения javascript не представляется возможным с помощью HTMLUNIT. Так что этот вопрос можно закрыть, так как он не актуален.

Единственное решение — заставить HTMLUNIT работать с jquery-2.0.3. Обновил до последней версии, не помогло...

[Изменить] Наконец-то было найдено подходящее решение здесь : предотвращение того, чтобы HTMLUNIT генерировал исключение при ошибке javascript.

In [14]: driver = webdriver.Remote(desired_capabilities={'browserName': 'htmlunit', 'javascriptEnabled': False, 'platform': 'ANY', 'version': '', 'setThrowExceptionOnScriptError': False})

Теперь я могу загрузить свой URL! :)

person Flo    schedule 26.08.2014