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