当从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(vs 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'}
所以我在这里。如果有人有任何想法...... :)
答案 0 :(得分: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})
我现在可以加载我的网址了! :)