从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事件)
干杯
答案 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)
其中 command
和 options
在左侧滚动窗格(特别是 Runtime
部分)中定义 here。