如何在python中使用selenium和javascript跟踪鼠标事件和位置?

如何在python中使用selenium和javascript跟踪鼠标事件和位置?,javascript,python,selenium,Javascript,Python,Selenium,我正在通过在页面上执行javascript函数,在python中单击selenium web驱动程序中的元素,以获取元素详细信息 但它并没有像我预期的那样工作,甚至我使用了异步方法从javascript到python获取元素细节。但是我仍然无法在服务器端python代码中获得元素的详细信息 请为这种情况提供更好的解决方案 示例代码 @asyncio.coroutine def mouseevent(driver): while true:

我正在通过在页面上执行javascript函数,在python中单击selenium web驱动程序中的元素,以获取元素详细信息

但它并没有像我预期的那样工作,甚至我使用了异步方法从javascript到python获取元素细节。但是我仍然无法在服务器端python代码中获得元素的详细信息

请为这种情况提供更好的解决方案

示例代码

@asyncio.coroutine
def mouseevent(driver):
            while true:
                mouse =driver.execute_script(''' 
                    var x= onclick = function(e){
                        return e.target;
                    }
                ''')
                print(mouse)

driver=webdriver.Chrome(Chrome)

driver.implicitly_wait(30)
driver.maximize_window()
driver.get("https://www.google.com/")


loop = asyncio.get_event_loop()

tasks = [
    asyncio.ensure_future(mouseevent(driver))]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

提前谢谢

也许有更好的方法,但这段代码适合我


首先,我在开始时使用默认值创建变量
window.x
,这样我就可以随时检查它的值,即使我没有单击任何元素

driver.execute_script('window.x = null;')
稍后我分配给
body
函数,当我单击
body
时将执行该函数-它将为
window.x

driver.execute_script('document.body.addEventListener("click", function(e) { window.x = e.target;})')
在循环中,我只检查这个变量的值

while True:
    print(driver.execute_script('return window.x'))
    time.sleep(0.5)

它需要检查值是否在循环之间发生了更改,或者应该运行函数,将值从
window.x
复制到ie.
window.y
,然后清除
window.x
,并返回
window.y
——这样它只会获得一次值

while True:
    print(driver.execute_script('window.y = window.x; window.x = null; return window.y'))
    time.sleep(0.5)



编辑:我找到了应该能更好地解决问题的答案:

什么可以解决问题,但它并没有像我预期的那样工作?你有什么特别的问题吗?@AlexanderCécile谢谢你的回复。如何在SeleniumWebDriver中单击页面时获取元素详细信息。我无法访问从javascript返回的元素详细信息。我觉得我在重复我自己,但元素详细信息到底意味着什么?我有一个javascript函数**onclick=function(e){return e.target;}**,它返回单击的html元素。我可以在web浏览器中看到已单击的html元素详细信息,但无法在python中获取这些html元素详细信息。请参考上面的示例代码您的javascript代码仅将函数分配给变量
onclick
,但当您单击时,它将永远不会运行该函数。也许先在web浏览器的控制台中尝试此代码
onclick
是唯一的正常变量,与单击无关。也许你的意思是
$('body')。用
jQuery
单击(函数(e){…})
import selenium.webdriver
import time

url = 'https://stackoverflow.com'
driver = selenium.webdriver.Firefox()
driver.get(url)

driver.execute_script('window.x = null;')

driver.execute_script('document.body.addEventListener("click", function(e) { window.x = e.target;})')

while True:
    print(driver.execute_script('window.y = window.x; window.x = null; return window.y'))
    time.sleep(0.5)