🥳加入Scrapeless 社区申请免费试用以访问我们强大的网页抓取工具包!
返回博客

使用 Selenium 和 Ruby 绕过 CAPTCHA 的方法

Sophia Martinez
Sophia Martinez

Specialist in Anti-Bot Strategies

14-Sep-2024

CAPTCHAs 是当今许多网站的常见功能,旨在通过验证用户是人类来防止机器人和自动化脚本。对于从事网页抓取或自动化测试的开发人员来说,CAPTCHA 可能是巨大的障碍。但是,采用正确的方法,就可以克服这些挑战。在本文中,我们将探讨如何使用 Ruby 中的 Selenium 来绕过 CAPTCHA,Selenium 是一个功能强大的 Web 自动化工具。

了解 CAPTCHA 及其用途

在深入技术细节之前,了解 CAPTCHA 的含义及其实现原因至关重要。CAPTCHA 代表“Completely Automated Public Turing test to tell Computers and Humans Apart”,即“完全自动化的公共图灵测试,用于区分计算机和人类”。它是一种安全措施,通过呈现机器难以解决但人类相对容易解决的挑战来区分人类用户和机器人。这些挑战通常包括识别图像中的物体、解决难题或键入扭曲的文本。

Selenium 在 Web 自动化中的作用

Selenium 是一款开源工具,广泛用于自动化 Web 浏览器。它允许开发人员使用各种编程语言(包括 Ruby)编写脚本,以像人类一样与网页交互。Selenium 可以填写表格、单击按钮、浏览页面,甚至处理动态内容。但是,在涉及 CAPTCHA 时,Selenium 的功能有限,因为这些挑战专门设计用于阻止自动交互。

为了绕过 CAPTCHA,Selenium 必须与可以解决这些挑战的其他工具或服务结合使用,或者必须调整方法以避免在第一时间触发 CAPTCHA。

使用 Undetected ChromeDriver 与 Selenium 和 Ruby

CAPTCHA 是 Web 安全的重要工具,可以有效地阻止自动化机器人访问某些网页。但是,对于从事网页抓取或自动化测试的开发人员来说,CAPTCHA 会带来重大挑战。在本指南中,我们将探讨如何使用 Ruby 中的 Selenium 绕过 CAPTCHA,特别是通过利用 Undetected ChromeDriver——专门设计用于逃避反机器人系统检测的工具。

1. 什么是 Undetected ChromeDriver?

Undetected ChromeDriver 是 Selenium 的标准 ChromeDriver 的修改版本,经过优化,可以避免被高级反机器人机制检测到。虽然它主要针对 Python 开发,但可以通过将可执行文件移植到 Selenium 服务包来适应 Ruby。此过程涉及使用 Python 创建可执行文件,然后在 Ruby Selenium 脚本中使用它。

2. 在 Ruby 中设置 Undetected ChromeDriver

首先,您需要使用 Python 创建 Undetected ChromeDriver 可执行文件。虽然这需要一些 Python 知识,但它是该过程中的关键步骤。首先通过 pip 安装必要的 Python 库:

language Copy
pip install undetected-chromedriver

接下来,创建一个生成可执行文件的 Python 脚本:

language Copy
# 导入所需的模块
import undetected_chromedriver as uc
from multiprocessing import freeze_support

if __name__ == '__main__':
    freeze_support()
    driver = uc.Chrome(headless=False, use_subprocess=False)
    driver.quit()

运行此脚本以生成 Undetected ChromeDriver 可执行文件,它将保存在您系统上的 AppData 目录(对于 Windows)或 Linux 上的等效位置。

3. 将 Undetected ChromeDriver 与 Ruby 中的 Selenium 集成

现在您已拥有 Undetected ChromeDriver 可执行文件,可以将其与 Ruby 中的 Selenium 脚本集成。

首先导入 Selenium WebDriver 并指定 Chrome 浏览器和 Undetected ChromeDriver 可执行文件路径:

language Copy
require 'selenium-webdriver'

# Chrome 浏览器可执行文件路径
chrome_exe_path = 'C:/Program Files/Google/Chrome/Application/chrome.exe'

# Undetected ChromeDriver 可执行文件路径
undetected_chromedriver_path = 'C:/Users/<YOUR_USERNAME>/AppData/Roaming/undetected_chromedriver/undetected_chromedriver.exe'

接下来,通过设置适当的 Chrome 选项和服务参数,配置 Selenium 以使用 Undetected ChromeDriver:

language Copy
options = Selenium::WebDriver::Chrome::Options.new
options.binary = chrome_exe_path
options.add_argument('--headless')

service = Selenium::WebDriver::Service.chrome(path: undetected_chromedriver_path)

driver = Selenium::WebDriver.for :chrome, options: options, service: service

此设置指示 Selenium 使用 Undetected ChromeDriver,它不太可能被反机器人措施标记。

4. 浏览和与受 CAPTCHA 保护的页面交互

配置好驱动程序后,您现在可以导航到受 CAPTCHA 保护的网页并尝试绕过 CAPTCHA。重要的是给驱动程序一些时间来处理 CAPTCHA 挑战:

language Copy
begin
  driver.navigate.to 'your_target_url'


```python
# 允许时间用于处理验证码
  sleep(10)

  # 拍摄屏幕截图以验证验证码是否已绕过
  driver.save_screenshot('captcha_bypass_screenshot.png')
  puts '屏幕截图已保存。'
ensure
  driver.quit
end

这个脚本将导航到指定的 URL,等待验证码处理,并保存屏幕截图以确认验证码是否已成功绕过。

5. 限制和注意事项

虽然 Undetected ChromeDriver 对许多验证码实现有效,但它可能无法绕过最先进的反机器人系统。使用先进技术(如高级行为分析或更复杂的挑战)的网站仍然可以阻止自动脚本,即使使用此工具。还必须认识到绕过验证码的道德考虑和潜在的法律影响,因为未经授权的访问或抓取会导致帐户被封禁、法律诉讼或其他后果。

在这种情况下,可能需要采取进一步措施,例如集成机器学习模型、轮换代理或使用专门的验证码解决服务。但是,这些技术通常需要更复杂的设置,并且应该负责任地使用。

使用网页抓取 API 绕过验证码

验证码和高级反机器人系统对免费、开源解决方案构成了重大挑战。这些系统通常采用复杂的技术,例如浏览器指纹识别和机器学习,来检测和阻止自动访问尝试,使基本的绕过方法无效。

对于更强大的方法,使用网页抓取 API 可以是绕过验证码挑战最可靠的方法。此类 API 通常提供全面的反机器人绕过功能,包括高级代理轮换、无头浏览器集成、请求标头优化等。

使用验证码解码器绕过验证码

为了说明,让我们探讨如何使用验证码求解器绕过受保护网页上的验证码。

厌倦了不断被CAPTCHA阻碍你的网页抓取工作?

向您强烈推荐 Scrapeless - 性能强大的一体化网页抓取解决方案。

Scrapeless:目前最好的一体化在线抓取解决方案!

借助我们强大的工具套件,可以轻松发挥数据抓取的全部潜力:

最佳 CAPTCHA 解码器

自动解决复杂的 CAPTCHA 问题,确保持续而丝滑地抓取网页数据。

免费试用开启中!

结论

对于参与网页抓取或自动化测试的开发人员来说,绕过验证码是一项复杂但可实现的任务。像 Selenium 这样的工具,特别是与 Undetected ChromeDriver 配合使用时,提供了用于导航受验证码保护的网页的有效方法。虽然这种方法很强大,但它并非万无一失——先进的反机器人系统可能仍然带来挑战。对于 Selenium 无法胜任的情况,网页抓取 API 提供了一个强大的替代方案,提供了专门的功能来绕过最复杂的验证码。

但是,必须谨慎地处理绕过验证码。应始终考虑道德问题和法律影响,因为未经授权访问受保护的网站会导致严重后果。通过将技术知识与负责任的做法相结合,开发人员可以有效且合乎道德地应对验证码带来的挑战。

在Scrapeless,我们仅访问公开数据,同时严格遵守适用的法律、法规和网站隐私政策。 本博客内容仅用于演示目的,不涉及任何非法或侵权行为。 对于使用本博客或第三方链接的信息,我们不做任何保证,也不承担任何责任。 在参与任何抓取活动之前,请咨询您的法律顾问并查看目标网站的服务条款或获取必要的权限。

最受欢迎的文章

目录