从chrome webdriver(python)访问getEventListeners

时间:2015-12-10 14:30:52

标签: javascript python google-chrome selenium

目的:

从selenium webdriver获取附加到节点的所有事件

我正在使用selenium-python,我想执行一个javascript脚本(通过driver.execute_script('my js script')

此脚本使用的getEventListeners仅适用于 Chrome 。 我成功使用了

driver = webdriver.Chrome('path/to/chromedriver')

启动Chrome浏览器。用getEventListeners(myNode)执行我的脚本我得到类似的东西:

  

文件" /usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py" ;,第403行,在execute_script中       {'脚本&#39 ;:脚本,' args':converted_args})['价值']     文件" /usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py" ;,第175行,执行       self.error_handler.check_response(响应)     文件" /usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py" ;,第166行,在check_response中       提出exception_class(消息,屏幕,堆栈跟踪)   selenium.common.exceptions.WebDriverException:消息:未知错误:未定义getEventListeners

getEventListeners可通过命令行API获得,但我无法通过selenium使其工作。这有解决方案吗?有没有其他方法可以将所有事件绑定到元素? (尤其是Click事件)

干杯

2 个答案:

答案 0 :(得分:2)

遗憾的是,答案是:无法通过getEventListeners访问ChromeDriver。如评论所述,这是by design

警告:仅当您从Chrome DevTools控制台调用它们时,这些功能才起作用。如果您尝试在脚本中调用它们,它们将无法工作。

相应的issue report设置为WontFix

但是:

检出this answer,以查找不使用getEventListeners的所有附加到节点的事件。

答案 1 :(得分:1)

2021 年更新:

Selenium 的 Beta 版提供了 Chrome 开发工具 API。它几乎没有记录,但似乎适用于简单的仅开发工具的 JS 命令。

例如 pip install -Iv selenium==4.0.0.b3

browser = webdriver.Chrome('path/to/chromedriver')
js_return = browser.execute_cdp_cmd(command, options)

其中 commandoptions 在左侧滚动窗格(特别是 Runtime 部分)中定义 here