【问题标题】:Python to continue receive click event output from JavascriptPython继续接收来自Javascript的点击事件输出
【发布时间】:2020-02-19 02:17:33
【问题描述】:

我正在尝试开发一种工具,让用户通过记录浏览器中的点击来为自己创建一个简单的 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 事件返回?

【问题讨论】:

    标签: javascript python selenium selenium-webdriver events


    【解决方案1】:

    “execute_async_script”等待来自 javascript 的回调。

    一旦调用了(由 Python)等待的回调“arguments[0]”,即使 EventListener 仍在浏览器上,Python 也会得到它的回调。函数 execute_async_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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多