CAPTCHA,全称“全自动公共图灵测试以区分计算机和人类”,旨在保护网站免受自动化机器人的攻击。虽然它们在保护在线平台方面发挥着至关重要的作用,但当使用像 Selenium 这样的工具自动化任务时,它们可能会成为一个重大障碍。如果您在 Ruby 中使用 Selenium 并需要解决 CAPTCHA,本指南将提供一种逐步方法来有效地处理它们。
Selenium 和 Ruby 是什么?
在我们深入解决 CAPTCHA 之前,了解您将使用的工具至关重要:Selenium 和 Ruby。
- Selenium 是一款强大的开源工具,用于自动化 Web 浏览器。它允许开发人员用各种编程语言编写脚本以模拟用户与网页的交互,使其成为测试和网络抓取的热门选择。
- Ruby 是一种动态面向对象编程语言,以其简单性和生产力而闻名。它通常用于 Web 开发,当与 Selenium 结合使用时,它提供了用于自动化浏览器任务的强大框架。
了解 CAPTCHA 及其类型
在深入研究解决方案之前,了解您可能遇到的不同类型的 CAPTCHA 很重要:
-
ImageToText CAPTCHA:这些要求用户输入显示在扭曲图像中的字符。您可以在 此处 找到一些常见案例
-
基于图像的 CAPTCHA:用户需要选择与给定标准匹配的图像(例如,选择所有带有交通灯的图像)。主要来自 reCAPTCHA
-
reCAPTCHA:谷歌的先进 CAPTCHA 系统,通常要求识别图像中的物体,或者简单地单击一个复选框来证明你不是机器人。
-
hCAPTCHA: 与 reCAPTCHA 类似,但通常用于旨在提供更注重隐私的解决方案的网站。
领取您的 奖励代码 以获得顶级验证码解决方案;CapSolver: WEBS。兑换后,您每次充值后将获得额外 5% 的奖励,无限次
Selenium Ruby 能解决验证码吗?
开发人员中最常见的问题之一是 Selenium 与 Ruby 是否可以解决验证码。简短的答案是:不能直接解决。Selenium 本身没有内置功能来解决验证码,因为它们专门设计用于区分人类用户和机器人。
但是,在 Selenium Ruby 中处理验证码有几种方法:
- 手动干预: 在某些情况下,开发人员会在自动化过程中手动解决验证码。但是,这违背了完全自动化的目的。
- 第三方验证码求解器: 最有效的方法是集成像 CapSolver 这样的第三方服务,它们专门使用高级算法和人工智慧来解决验证码。
- 解决简单的验证码: 对于非常基本的文本验证码,开发人员可能会编写自定义脚本以识别模式,尽管这种方法有限且通常不可靠。
虽然 Selenium Ruby 无法自行解决验证码,但有了合适的工具和服务,完全可以自动化绕过验证码的过程,我们将在本指南中探讨这一点。
在 Ruby 中设置 Selenium
准备工作
- Google Chrome: 安装最新版本的 Chrome 浏览器,因为我们将使用代码与 Chrome 进行交互。
- Ruby: 确保您的计算机上已安装 Ruby。
- Selenium-webdriver:Selenium 自动化工具的 Ruby 库。
- CapSolver: 官方 CapSolver 文档将帮助您解决 CAPTCHA。
在您的计算机上安装 Ruby 后,您可以通过运行命令 gem install selenium-webdriver
来安装 Selenium WebDriver 库。检查您的 Chrome 版本,并根据版本下载相应的 chromedriver.exe
驱动程序。您可以在以下位置找到下载链接:
分析目标网站
我们将使用网站 https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php
作为示例,使用 Ruby Selenium 解决 reCAPTCHA。
在开始之前,我们需要了解 HTML 表单提交的基础知识。通过观察此页面并打开开发者工具,我们可以手动解决 reCAPTCHA,然后单击提交按钮。此操作会发送一个 POST 请求,提交三个字段:ex-a
、ex-b
和 g-recaptcha-response
,如下所示:
这三个字段对应于初始 HTML 源代码中表单下方的两个输入元素和一个文本区域元素,如下所示:
使用 Ruby Selenium 自动化流程
如何使用 Ruby Selenium 自动化整个过程?步骤如下:
- Ruby 驱动 Selenium 访问目标网站。
- Ruby 调用 CapSolver API 解决 reCAPTCHA 并获取令牌。
- 将 textarea 元素的 CSS 样式从
display: none
更改为display: block
,使其可与 Selenium 交互。 - 模拟将 CapSolver 返回的令牌输入 textarea 元素。
- 模拟单击提交按钮以提交表单并完成验证。
使用 Ruby Selenium 访问目标网站
确保您将下面代码中的 driver_path
替换为计算机上 chromedriver
的实际路径。
require 'selenium-webdriver'
# 初始化 Chrome 浏览器选项并访问目标网站
driver_path = "path/to/chromedriver.exe"
options = Selenium::WebDriver::Chrome::Options.new
service = Selenium::WebDriver::Service.chrome(path: driver_path)
driver