使用Selenium添加JavaScript事件监听器会自动触发它

问题描述

由于(根据我的研究)无法用硒捕获用户输入,因此我正在尝试使用JavaScript事件侦听器。

但是当我通过执行JavaScript代码添加事件侦听器时,该功能自动触发,而无需我(作为用户)执行任何操作。此外,无法再次触发该功能

有人知道这个问题可能是什么,我该如何解决? 仅供参考:我的代码在Python 3.8中

先谢谢您, 拉斐尔

# this is a self defined function that creates a new selenium WebDriver
browser = gf.create_browser(headless=False)

browser.get("https://www.google.com")

browser.execute_script('document.getElementById("hplogo").addEventListener("mouSEOver",console.log("Success"))')

time.sleep(90)

一旦执行脚本,控制台将显示“成功”,此后便不再触发该事件。我尝试了不同的事件(单击,鼠标悬停...),不同的功能以及具有不同元素的不同网站。

解决方法

您没有传递函数-实际上,您只是直接调用

console.log("Success")

此^调用函数。您最终传递的实际参数是console.log的结果,而不是函数本身(如果我还记得,它只是一个undefined)的结果。如果您想实际传递函数,则应执行以下操作。

() => console.log("Success")

对于ES6之前支持的浏览器,您可以使用:

function(){console.log("Success")}
,

代码完全是一个无限循环,因此它仅触发一次,然后在不触发之后触发。 建议将代码编辑为

addEventListener("mouseover",{console.log("Success")})