Pas*_*ten 5 javascript python selenium
我正在使用 Selenium 浏览器进行日常浏览,当我在任何页面上按下某些键时,我想触发一些代码。起初我以为我可以在每个注册键/鼠标输入的页面上加载 javascript,但实际上我真的更喜欢有一些 python 列表可用于过去的键/鼠标点击,例如我在 javascript 中的关键示例:
var myhistory = []
document.addEventListener("keydown", keyDownTextField, false);
function keyDownTextField(e) {
var keyCode = e.keyCode;
myhistory.push(keyCode)
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在纯 Python/Selenium 中做到这一点?
我会尝试什么:
执行在文档正文中注册的 javascript
<body onkeyup="my_javasctipt_keyup()" and onkeydown="my_javasctipt_keydown()">
Run Code Online (Sandbox Code Playgroud)
使用browser.execute_script
。(部分解决,参见问题)
将 key up 和 keydown 事件保存在 javascript 的变量中。(已解决,请参阅问题)
browser.execute_script
返回变量。我不确定的是:
browser.execute_script
可能仅返回json可序列化对象或字符串希望这有帮助。如果有任何代码结果,我有兴趣知道。
我觉得这段代码应该有效:
from selenium import webdriver
browser = webdriver.Firefox()
browser.execute_script("""var myhistory = []
document.addEventListener("keydown", keyDownTextField, false);
function keyDownTextField(e) {
var keyCode = e.keyCode;
myhistory.push(keyCode)
}""")
def get_history():
return browser.execute_script("myhistory")
# now wait for a while and type on the browser
import time; time.sleep(5000)
print("keys:", get_history())
Run Code Online (Sandbox Code Playgroud)
关键是,selenium 的代码永远不能在浏览器处理键盘输入的同时运行。因此,需要在 javascript 中处理事件,将结果保存在数组中,然后,当请求 selenium 时,将数组返回给 Python。