【问题标题】:Disabling javascript with htmlunit through a remote webdriver通过远程 Web 驱动程序使用 htmlunit 禁用 javascript
【发布时间】:2015-07-06 22:24:19
【问题描述】:

当从 python 脚本获取带有 selenium 的页面时,通过远程 webdriver 使用 htmlunit,我收到此错误:

WebDriverException:消息:u'TypeError:在对象 [object HTMLDocument] 中找不到函数 addEventListener。 (https://xxx.xxx.com/static/js/jquery-2.0.3.min.js#4)

所以为了避免这个异常,我尝试在初始化我的 webdriver 时禁用 javascript,但我无法做到......

我尝试使用 webdriver.DesiredCapabilities.HTMLUNIT(与 HTMLUNITWITHJS)设置 desired_capabilities,但没有任何改变。所以我尝试手动定义功能,但没有帮助。

以下是我所做的一些示例以及结果:

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'}

所以我来了。如果有人有任何想法... :)

【问题讨论】:

    标签: python selenium htmlunit remotewebdriver


    【解决方案1】:

    部分答案,以防其他人遇到相同类型的问题:

    1/ 查看服务器日志,看来我关于 javascriptEnabled 设置的说明实际上已被 selenium 服务器考虑在内。客户端显示的desired_capabilities字典不相关。

    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/ 阅读 this discussion,看来我对 javascriptEnabled 设置的期望并不是它的本意。这不会禁用浏览器中的 javascript 执行,而是禁用来自客户端脚本的 javascript“注入”。

    使用 HTMLUNIT 似乎无法禁用 javascript 执行。所以这个问题可以关闭,因为它不相关。

    唯一的解决方案是让 HTMLUNIT 与 jquery-2.0.3 一起工作。我将它升级到最新版本,但它没有帮助......

    [编辑] 终于找到了合适的解决方案here:防止 HTMLUNIT 在 javascript 错误上抛出异常。

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

    我现在可以加载我的网址了! :)

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 2012-08-17
      • 1970-01-01
      • 2015-09-17
      • 2017-11-06
      相关资源
      最近更新 更多