使用Selenium和Ruby解决CAPTCHA

Ethan Collins
Pattern Recognition Specialist
29-Aug-2024

验证码,全称“全自动区分计算机和人类的公开图灵测试”,旨在保护网站免受自动化机器人的攻击。虽然它们在保障在线平台安全方面发挥着至关重要的作用,但在使用Selenium等工具自动化任务时,它们却可能成为一个巨大的障碍。如果您正在使用Ruby版本的Selenium,并且需要解决验证码问题,本指南将提供一种逐步处理它们的高效方法。
什么是Selenium和Ruby?
在深入探讨如何解决验证码之前,务必了解您将要使用的工具:Selenium和Ruby。
- Selenium是一个功能强大的开源工具,用于自动化Web浏览器。它允许开发人员使用各种编程语言编写脚本,以模拟用户与网页的交互,使其成为测试和网络抓取的热门选择。
- Ruby是一种动态的面向对象编程语言,以其简洁性和生产力而闻名。它经常用于Web开发,并且当与Selenium结合使用时,它提供了一个强大的框架来自动化浏览器任务。
了解验证码及其类型
在深入研究解决方案之前,了解您可能遇到的不同类型的验证码非常重要:
- 图片转文字验证码: 这些验证码要求用户输入扭曲图像中显示的字符。您可以在这里找到一些常见案例here
- 基于图像的验证码: 用户需要选择符合给定条件的图像(例如,选择所有带有交通灯的图像)。大多数来自reCAPTCHA
- reCAPTCHA: 谷歌的高级验证码系统,通常需要识别图像中的物体,或者只需单击一个复选框即可证明你不是机器人。

领取顶级验证码解决方案的奖励代码;CapSolver:WEBS。兑换后,每次充值将获得额外5%的奖励,无限次使用
Selenium Ruby可以解决验证码吗?
开发人员中最常见的问题之一是,Selenium与Ruby是否可以解决验证码。简短的答案是:不能直接解决。Selenium本身没有内置功能来解决验证码,因为验证码的设计初衷就是区分人类用户和机器人。
但是,有多种方法可以在Selenium Ruby中处理验证码:
- 人工干预: 在某些情况下,开发人员会在自动化过程中手动解决验证码。但是,这会破坏完全自动化的目的。
- 第三方验证码求解器: 最有效的方法是集成像CapSolver这样的第三方服务,这些服务专门使用高级算法和人工智力来解决验证码。
- 解决简单的验证码: 对于非常基本的文本验证码,开发人员可能会编写自定义脚本以识别模式,但这是一种有限且通常不可靠的方法。
虽然Selenium Ruby本身无法解决验证码,但是有了合适的工具和服务,完全有可能自动化绕过验证码的过程,我们将在本指南中探讨这一点。
在Ruby中设置Selenium
准备工作
- 谷歌浏览器: 安装最新版本的Chrome浏览器,因为我们将使用代码与Chrome交互。
- Ruby: 确保您的计算机上已安装Ruby。
- Selenium-webdriver: Selenium自动化工具的Ruby库。
- CapSolver: 官方CapSolver文档将帮助您解决验证码。
在计算机上安装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并获取令牌。
- 将文本区域元素的CSS样式从
display: none更改为display: block,使其可以与Selenium交互。 - 模拟将CapSolver返回的令牌输入到文本区域元素中。
- 模拟单击提交按钮以提交表单并完成验证。
使用Ruby Selenium访问目标网站
确保您在下面的代码中将driver_path替换为您计算机上chromedriver的实际路径。
ruby
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 = Selenium::WebDriver.for :chrome, options: options, service: service
url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
driver.navigate.to url
获取令牌
要使用CapSolver API,我们需要提供websiteKey,这可以通过在页面源代码中搜索关键字data-sitekey来找到:

现在,让我们编写Ruby代码来使用CapSolver API自动解决reCAPTCHA:
ruby
require 'net/http'
require 'json'
require 'time'
def cap_solver(api_key, public_key, page_url)
payload = {
"clientKey" => api_key,
"task" => {
"type" => 'ReCaptchaV2TaskProxyLess',
"websiteKey" => public_key,
"websiteURL" => page_url,
}
}
# 发送任务创建请求
uri = URI("https://api.capsolver.com/createTask")
res = Net::HTTP.post(uri, payload.to_json, { "Content-Type" => "application/json" })
resp = JSON.parse(res.body)
task_id = resp["taskId"]
unless task_id
puts "Failed to create task: #{res.body}"
return
end
puts "Got taskId: #{task_id}"
# 循环等待获取任务结果
loop do
sleep(1)
payload = { "clientKey" => api_key, "taskId" => task_id }
uri = URI("https://api.capsolver.com/getTaskResult")
res = Net::HTTP.post(uri, payload.to_json, { "Content-Type" => "application/json" })
resp = JSON.parse(res.body)
status = resp["status"]
if status == "ready"
token = resp.dig("solution", "gRecaptchaResponse")
puts "Solve succeed, token: #{token}"
return token
elsif status == "processing"
puts "Solve in progress..."
elsif status == "failed"
puts "Solve failed! response: #{res.body}"
return
end
end
end
在Selenium中使用令牌
接下来,我们需要将令牌输入网页,自动单击提交,并完成整个过程。让我们组合所有代码;完整的代码如下(请务必将cap_solver_api_key替换为您自己的密钥,您可以在CapSolver仪表盘中找到):
ruby
require 'selenium-webdriver'
require 'net/http'
require 'json'
require 'time'
def cap_solver(api_key, website_key, page_url)
payload = {
"clientKey" => api_key,
"task" => {
"type" => 'ReCaptchaV2TaskProxyLess',
"websiteKey" => website_key,
"websiteURL" => page_url,
}
}
# 发送任务创建请求
uri = URI("https://api.capsolver.com/createTask")
res = Net::HTTP.post(uri, payload.to_json, { "Content-Type" => "application/json" })
resp = JSON.parse(res.body)
task_id = resp["taskId"]
unless task_id
puts "Failed to create task: #{res.body}"
return
end
puts "Got taskId: #{task_id}"
# 循环等待获取任务结果
loop do
sleep(1)
payload = { "clientKey" => api_key, "taskId" => task_id }
uri = URI("https://api.capsolver.com/getTaskResult")
res = Net::HTTP.post(uri, payload.to_json, { "Content-Type" => "application/json" })
resp = JSON.parse(res.body)
status = resp["status"]
if status == "ready"
token = resp.dig("solution", "gRecaptchaResponse")
puts "Solve succeed, token: #{token}"
return token
elsif status == "processing"
puts "Solve in progress..."
elsif status == "failed"
puts "Solve failed! response: #{res.body}"
return
end
end
end
# 初始化Chrome浏览器选项并访问目标网站
driver_path = "path/to/chromedriver.exe"
options = Selenium::WebDriver::Chrome::Options.new
service = Selenium::WebDriver::Service.chrome(path: driver_path)
driver = Selenium::WebDriver.for :chrome, options: options, service: service
url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
driver.navigate.to url
# 调用CapSolver API来解决ReCaptcha
cap_solver_api_key = 'YOUR_API_KEY'
website_key = '6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9'
token = cap_solver(cap_solver_api_key, website_key, url)
if token.nil? || token.empty?
puts "Failed to solve captcha, Press any key to exit."
STDIN.gets
driver.quit
return
end
# 更改文本区域的display样式属性为block以使其可见
driver.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';")
# 模拟将令牌输入到文本区域
textarea = driver.find_element(id: 'g-recaptcha-response')
textarea.send_keys(token)
# 模拟点击并提交表单
submit_btn = driver.find_element(css: "button[type='submit']")
submit_btn.click
puts "Press any key to exit."
STDIN.gets
driver.quit

运行上述代码,您将看到recaptcha已成功解决。
更多信息
CapSolver使用基于AI的自动Web解锁技术,帮助您在几秒钟内解决验证码。它不仅可以解决reCAPTCHA,还可以解决Cloudflare Turnstile等更多问题。CapSolver还提供多种语言的SDK以及浏览器扩展程序。您可以参考CapSolver文档了解更多信息。
合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。
更多

Cloudflare 错误 1006、1007、1008 解决方法 | 如何修复
遇到 Cloudflare 错误 1006、1007 或 1008?学习解决这些访问被拒绝问题的实用方法,提升您的网络爬虫体验。

Lucas Mitchell
05-Dec-2025

如何使用 Scrapling 和 CapSolver 解决验证码
Scrapling + CapSolver 支持通过 ReCaptcha v2/v3 和 Cloudflare Turnstile 绕过进行自动化抓取。

Ethan Collins
05-Dec-2025

在 Selenium 中更改用户代理 | 步骤 & 最佳实践
在Selenium中更改用户代理是许多网络爬虫任务中的关键步骤。它有助于将自动化脚本伪装成普通浏览器...

Anh Tuan
05-Dec-2025

如何确定`action`是否需要使用CapSolver扩展程序来解决Cloudflare Turnstile
学习识别Cloudflare Turnstile的CAPTCHA操作以实现有效解决。按照我们的分步指南使用Capsolver的工具和技巧。

Nikolai Smirnov
05-Dec-2025

探索9Proxy的力量:全面评测
在本文中,我们将向您展示9proxy是什么以及其提供的服务。

Anh Tuan
04-Dec-2025

使用Selenium和Python进行网络爬虫 | 解决网络爬虫中的验证码
在本文中,您将掌握使用Selenium和Python进行网络爬虫,并学习如何解决过程中遇到的Captcha,以实现高效的数据提取。

Ethan Collins
04-Dec-2025


