Skip to main content

如何在 Playwright 中移动鼠标以模拟人类行为

 

当类似人类的鼠标移动在 Web 抓取中很重要时?

当我们处理网站的网络抓取项目时,我们可能会遇到安装了反机器人保护软件的情况。根据网站运营的行业,这可能是常见情况,也可能不是:根据我在 200+ 时尚电子商务网站的经验,我在其中抓取价格和产品等公共组件,我可以说其中大约 20% 具有某种机器人保护。如果您的目标是有预算在这些解决方案上花费的大玩家,而鲜为人知的网站通常更愿意关注购买过程的安全性,则尤其如此。

如果没有反机器人保护,可能 Scrapy spider 可以完成这项工作,您不必关心鼠标移动,因为服务器端没有人关心它。

即使您看到有一个反机器人要求您提供合理的设备指纹来绕过,在许多情况下这就足够了,您无需担心移动。一些反机器人解决方案更喜欢主要依赖有关浏览器和设备配置的信号,而不是跟踪浏览器发送的每个事件,例如鼠标移动,至少当它们设置为较低的“侵略性”级别时是这样。

其他反僵尸软件,如 Datadome,当设置为高级别安全性时,对爬虫的行为非常敏感,所有偏离轨道的东西都会被标记为可疑,并可能导致阻止,即使有人正在浏览。在 Hermes.com 网站上自己尝试一下,根据我的经验,这是我遇到的保护最严密的网站之一。输入一个随机的产品类别并开始快速浏览所有产品,在新选项卡中打开图片和链接:几分钟后您将被阻止。

这是因为您没有像真正有兴趣购买的人那样浏览网站,这是所谓的“行为分析”的结果,可以在 Datadome 页面上找到该声明

Datadome 不仅会分析您向目标网站发出的请求的顺序,还会分析您的抓取工具如何从一个页面过渡到另一个页面:它是否通过直接链接访问,甚至在内部页面中?是用鼠标四处点击吗?如果是这样,鼠标如何在页面上移动?

标准的 Playwright 鼠标移动

Playwright 由于是用于应用程序测试的浏览器自动化工具,因此没有模拟类似人类的鼠标移动的本机功能。它的核心功能是为在 Web 应用程序上创建和执行测试而构建的:它提供了一组函数,用于在 Playwright 浏览器实例内移动鼠标,但移动非常不自然。

在为付费订阅者保留的 GitHub 存储库中,您将找到一个简单的程序 (draw_play.py),它以 Playwright 在两点之间移动的方式在两点之间划一条线:快速和笔直。

很难相信这是人类在两点之间生成的鼠标移动。每次我们告诉 Plawright 点击屏幕上的某个点时,它会立即沿着一条直线转到该点。

高级反机器人侦听 mousemove 事件,正如您可以想象的那样,当鼠标在页面上移动时触发该事件。 正如我们从 W3C 标准文档中阅读的那样

移动指针设备时的事件频率取决于具体实现、设备和平台,但 对于持续的指针设备移动,应该触发多个连续事件,而不是针对鼠标的每个实例触发一个事件。mousemove

这意味着平均而言,我们手动浏览的每个页面都会触发数百个事件,而如果我们的抓取工具从一个选择器跳到另一个选择器,它将生成很少的事件。此外,如果我们强制 Playwright 移动鼠标,这些移动将太快太直,无法与类似人类的移动兼容。

python_ghost_cursor 鼠标移动实现

我们过去已经讨论过贝塞尔曲线:它们是一种以编程方式绘制曲线的方法。多个 Python 包使用它们来模拟与网页的类似人类的交互,并对鼠标的速度进行一些调整。

Ghost_cursor 是一个 JS 库,它实现了用于计算鼠标在两点之间的轨迹的贝塞尔曲线,还添加了菲特定律的实现来计算其速度。
来自维基百科:

单个菲茨定律任务期间的移动可以分为两个阶段:

  • 初始移动。快速但不精确地朝向目标移动

  • final movement。更慢但更精确的移动以捕获目标

第一阶段由到目标的距离定义。在这个阶段,距离可以快速闭合,但仍然不精确。第二个动作试图执行一个缓慢而受控的精确动作,以真正击中目标。任务持续时间根据难度线性缩放。但是,由于不同的任务可能具有相同的难度,因此距离对整体任务完成时间的影响大于目标大小。

基本上,鼠标开始移动得更快,然后在接近目标按钮或选择器时减慢速度,从而模拟人类行为。这足以绕过反机器人吗?

浏览 Hermes 网站

在所有这些理论之后,让我们回到受 Datadome 保护的 Hermes 网站的初始示例。

如前所述,它是最难绕过的网站之一,我们想看看我们今天学到的东西是否可以帮助欺骗它的反机器人。

我写了两个小脚本,一个是 Playwright 没有 Ghost 光标,另一个是 Playwright。他们都希望打开网站的主页并迭代其下拉菜单,而不会被阻止。

没有 Ghost 光标❌的 Playwright

使用 Brave 浏览器打开与 Playwright 的会话,但没有 Ghost 光标,我们可以加载主页,但我们什至无法单击菜单。我不知道我的脚本是否有任何问题,但由于我无法打开汉堡菜单,因此找不到用于迭代类别的选择器,并且爬虫返回错误。

您可以在存储库上为付费订阅者test_play.py的文件中找到完整代码。如果您是其中之一但没有访问权限,请在 pier@thewebscraping.club 写信给我 并提供您的 GitHub 用户名,因为我需要手动发送给您。

带有 Ghost 光标✅的 Playwright

让我们将 ghost-cursor 包添加到程序中,并创建一个光标以在页面上移动鼠标并单击选择器。

	cursor = create_cursor(page)
	page.goto('https://www.hermes.com')
	selector = page.locator('xpath=//button[@id="collection-button"]')
	selector.wait_for()
	cursor.click(selector)

使用这个简单的附加组件,我们可以迭代整个菜单而不会被阻塞。您可以在 程序test_ghost.py的同一存储库中找到完整的程序

这似乎是进行我们的抓取项目的好方法。当然,这只是成功抓取网站的一小块拼图:您需要拥有良好的设备指纹、高质量的 IP 地址,并设计爬虫以模仿人类用户想要浏览网站时所遵循的路径。

感谢您阅读本期杂志,下周四再见一篇“The Lab”文章,下周日再见我们的新课程“Web Scraping from 0 to hero”课程。

Comments

Popular posts from this blog

10 Best Web Scraping Tools in 2025

Have you ever considered the methods used by businesses to collect large amounts of data for market research, price monitoring, sentiment analysis and lead generation? The answer is web scraping. Web scraping tools extract data from digital channels and transform it into easily readable information that can be analysed and manipulated. This information is crucial for businesses to target prospects and customers with relevant messages. However, web scraping is not without its challenges. It is becoming increasingly common for websites to employ sophisticated anti-scraping measures in order to block data extraction. It is therefore essential to select the appropriate tool for the task in hand. It is important to note that all local data protection and data usage laws must be adhered to. Use web scraping for legitimate purposes and contribute to making the Internet a less spammy place for all of us. We have compiled a list of the ten most suitable web scraping tools, highlighting their re...

2025年10种最佳网络爬虫

  您是否考虑过企业使用方法来收集大量数据以进行市场研究、价格监控、情绪分析和潜在客户生成? 答案是网络抓取。Web 抓取工具从数字渠道中提取数据并将其转换为易于阅读的信息,以供分析和操作。这些信息对于企业向潜在客户和客户提供相关信息至关重要。 然而,网络抓取并非没有挑战。网站采用复杂的反抓取措施来阻止数据提取变得越来越普遍。因此,为手头的任务选择合适的工具至关重要。 请务必注意,必须遵守所有当地数据保护和数据使用法律。将 Web 抓取用于合法目的,并有助于使 Internet 成为我们所有人的垃圾邮件较少的地方。 我们编制了一份十种最合适的网络抓取工具列表,突出了它们各自的优缺点,以帮助您选择最适合您需求的工具。🚀 选择网络抓取工具时的主要考虑因素是什么? 最有效的网络抓取工具是那些能够适应不断变化的数字环境的工具。在我们继续列出前 10 名之前,重要的是要强调一些需要寻找的关键功能。 易用性: 是任何数据提取工具的关键考虑因素。 在方法方面,有两个主要选项:无代码或可视化抓取。提供直观界面并专为点击式数据提取而设计的工具更适合初学者和非技术用户。 低代码: 对于更有经验的用户,允许通过编码进行灵活的 Web 爬虫设置和爬虫 API 自定义的框架可能更可取。 静态与动态: 该工具应该能够处理使用 JavaScript 或 AJAX 构建的网站,其中内容是动态加载的。 数据结构提取:  该工具应该能够以结构化的 Excel 格式(如 CSV)或原始 HTML 格式提取数据。 它还应该具有可扩展性并表现良好。 它应该能够使用云服务。基于云的数据抓取工具提供强大的基础设施和可扩展性,使其成为大型项目的理想选择。 多线程或并发: 该工具应该能够同时抓取多个页面,从而加快数据采集速度。 数据处理和存储:  虽然提取正确的数据是关键步骤,但这只是成功的一半。提供数据清理、转换和结构化功能的工具对于简化数据管理非常宝贵。 提供云存储的平台允许用户在线存储来自其 Web 抓取工具的所有数据,从而为数据提供集中且安全的数据存储库。这允许用户远程访问数据,从而降低数据存储成本。 其他注意事项:  为避免网站阻塞,建议使用提供轮换 IP 地址的工具。 无头浏览器:  这些是没有图形用户界面的 Web 浏览器,允许您模拟和自动化 Web ...

如何创建用于抓取 Telegram 频道的机器人

近年来,Telegram 已成为最受欢迎的通信、社区建设和共享内容平台之一。其独特的公共频道、私人群组和机器人结构使其成为研究人员、营销人员和开发人员的宝贵数据源。 我个人参加了几个 Telegram 群组,有些只是为了好玩,比如 Matched Betting 群组(不,我不这样做,我只是对它背后的数学感到好奇)到本地和全球新闻频道。 在本文中,我们将介绍抓取 Telegram 的基本要素,从设置您的第一个抓取工具到提取公共群组中的消息,再到检索其成员的信息。 寻找最有效的网站抓取方法是我们在咨询任务中提供的服务之一,此外还有旨在提高抓取操作的成本效率和可扩展性的项目。想了解更多?让我们取得联系。 为什么选择 Scrape Telegram? Telegram 是公开可用数据的宝库。您可以倾听社区中发生的事情,以了解 品牌如何被感知或用于 OSINT 目的,甚至可以为您的 AI 模型收集数据。 在开始之前,请记住,抓取 Telegram 需要明确的道德和法律框架。坚持使用可公开访问的数据并遵守平台的规则。 电报标志 了解 Telegram 的生态系统 在开始编写我们的爬虫之前,了解 Telegram 的结构至关重要: 公共频道: 对拥有 Telegram 帐户的任何人开放。它们主要用于广播消息。 公共群组: 成员可以在其中发布消息的讨论交互式空间。 私人频道/组: 访问需要邀请或批准。未经同意抓取这些是不道德的,并且可能是非法的。 机器人: 可以使用 Telegram 的 Bot API 以编程方式与之交互的自动化帐户。 本文将重点介绍如何抓取合法访问的公共频道和群组,尤其是在您不存储个人数据的情况下。 抓取电报的工具和技术 要抓取 Telegram,您有多种工具可供选择: 电报 API :  Telegram 提供了一个官方 API,允许您以编程方式与其平台进行交互。这是最可靠和可扩展的抓取方法。 Telethon : 一个 Python 库,可简化与 Telegram API 的交互。 Pyrogram : 另一个类似于 Telethon 的 Python 库,但具有一些附加功能。 BeautifulSoup/Selenium: 这些用于抓取 Telegram 的 Web 界面,但它们的效率较低且更容易出现自动化块问题。 我们将重点介绍如何将 Tele...