通过远程WebDriver禁用HTMLUnit中的JavaScript

0 投票
1 回答
880 浏览
提问于 2025-04-18 18:11

在用Python脚本通过远程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)来设置所需的能力,但没有任何变化。然后我又尝试手动定义这些能力,但也没有帮助。

以下是我做的一些例子,以及结果:

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

所以我现在在这里。如果有人有任何想法... :)

1 个回答

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/ 阅读了这个讨论后,我发现我对javascriptEnabled设置的期待并不是它的真正用途。这个设置并不是用来禁用浏览器中的javascript执行,而是用来控制客户端脚本的javascript“注入”。

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

唯一的解决办法是让HTMLUNIT与jquery-2.0.3一起工作。我把它升级到了最新版本,但没有帮助……

[编辑] 最终找到一个合适的解决方案在这里:防止HTMLUNIT在遇到javascript错误时抛出异常。

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

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

撰写回答