使用 Python 在 Selenium 中模拟鼠标移动
Posted
技术标签:
【中文标题】使用 Python 在 Selenium 中模拟鼠标移动【英文标题】:Simulate mouse movements in Selenium using Python 【发布时间】:2018-12-22 17:32:18 【问题描述】:我正在使用 Seleneium 抓取一些网站,这些网站会跟踪我的鼠标移动,并要求我使用鼠标点击周围。是否可以在不移动我的实际鼠标的情况下模拟被 javascript 识别为鼠标移动的鼠标移动? IE。这样我就可以运行多个脚本并能够使用我自己的鼠标来做其他事情?
我曾考虑过使用虚拟机,但这似乎太过分了,尤其是因为我需要同时运行多个。
这与Human-like mouse movements via Selenium 不同,因为这里的重点是如何模拟 javascript 将作为常规鼠标移动拾取的鼠标移动,但不会移动您的实际鼠标,因此您可以运行多个脚本和/或使用您的其他事情的常规鼠标。
【问题讨论】:
Human-like mouse movements via Selenium的可能重复 【参考方案1】:您可以通过 selenium-Python Binding 中的 ActionChains模拟鼠标动作。
假设你有一个这样的web element
:
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))
你可以像这样使用动作链:
ActionChains(driver).move_to_element(element).perform()
请注意,您必须导入 from selenium.webdriver.common.action_chains import ActionChains
这个才能使用动作链。
一些广泛使用的ActionChains方法是:
-
context_click(右键单击)
双击
拖放
move_to_element
send_keys
【讨论】:
两个问题 1. 这是否会移动我的实际鼠标 2. 如果没有,这是否会被给定网站检测为常规鼠标移动? 通过使用它来模拟鼠标操作,例如右键单击或双击。理想情况下,您应该让脚本在不使用实际键盘和实际鼠标的情况下运行。 Ans 1. 模拟您的实际鼠标。您仍然可以使用您的鼠标,但我不建议这样做。 2.如果网站限制太多,即能抓到你的普通鼠标,恐怕会被网站检测到。 好的 2 个后续问题。 1. 为什么在动作链运行时不使用常规鼠标? 2.有没有办法绕过检测的问题? Ans 1. 因为,我可能会遇到这个异常Element is not clickable at this point other element would receive the click at (x, y)
。当然是为了程序的顺利执行。 2. 您必须与开发人员交谈,为您提供一个无法检测到鼠标移动的测试环境。
我正在抓取相当大的网站,他们无法回复任何电子邮件或查询。以上是关于使用 Python 在 Selenium 中模拟鼠标移动的主要内容,如果未能解决你的问题,请参考以下文章