使用 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 中模拟鼠标移动的主要内容,如果未能解决你的问题,请参考以下文章

Python 模拟鼠键

使用 Python 在 Selenium 中模拟鼠标移动

Python+Selenium自动化篇-6-模拟鼠标操作

模拟登录知乎selenium在python中

Python Selenium.WebDriverWait 对Cookies的处理及应用『模拟登录』

Python Selenium.WebDriverWait 对Cookies的处理及应用『模拟登录』