Python继续从Javascript接收单击事件输出

2024-04-16 10:01:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图开发一个工具,让用户通过记录在浏览器中的点击来为自己创建一个简单的RPA。使用Selenium库,我可以在浏览器中执行事件侦听器javascript,并返回单击节点

from selenium import webdriver


driver = webdriver.Chrome()

test = driver.get('https://www.google.com')

js_script = "var resp = arguments[0]; document.addEventListener('click', function(e) { resp(e.path);}, true)"
response = driver.execute_async_script(js_script)

print(response)

这只能在浏览器中记录第一次单击。在浏览器中触发单击时,如何继续侦听Python中的Javascript事件返回


Tags: 工具用户responsedriverselenium记录js事件
1条回答
网友
1楼 · 发布于 2024-04-16 10:01:26

“执行异步脚本”等待javascript的回调

一旦调用了等待的(Python)回调“arguments[0]”,即使EventListener仍在浏览器上运行,Python也得到了它的回调。因此,函数execute\u async\u script就完成了

您可以在Python中创建一个逻辑来计算响应中的值,并根据该逻辑重新创建另一个脚本,或者直接在Javascript中执行类似以下操作的逻辑:(用户需要按“q”来终止事件)

js_script = """
//Callback function
var done = arguments[arguments.length - 1]; 
//Take all the events
var array_events = []

var retour = (e) => {
    array_events.push(e.path)
}

var quit = (key) => {
    console.log(array_events);
    (key.keyCode == 81 )? done(JSON.stringify(array_events)) : undefined
}
// Listen to the clicks
getPath = document.addEventListener("click", retour, true)
// Listen to the key "q" which means user has gathered all needed events
getKey = document.addEventListener("keydown", quit, true)

"""
response = driver.execute_async_script(js_script)
print(response)

相关问题 更多 >