
Ethan Collins
Pattern Recognition Specialist

验证码,全称“全自动区分计算机和人类的公开图灵测试”,旨在保护网站免受自动化机器人的攻击。虽然它们在保障在线平台安全方面发挥着至关重要的作用,但在使用Selenium等工具自动化任务时,它们却可能成为一个巨大的障碍。如果您正在使用Ruby版本的Selenium,并且需要解决验证码问题,本指南将提供一种逐步处理它们的高效方法。
在深入探讨如何解决验证码之前,务必了解您将要使用的工具:Selenium和Ruby。
在深入研究解决方案之前,了解您可能遇到的不同类型的验证码非常重要:

领取顶级验证码解决方案的奖励代码;CapSolver:WEBS。兑换后,每次充值将获得额外5%的奖励,无限次使用
开发人员中最常见的问题之一是,Selenium与Ruby是否可以解决验证码。简短的答案是:不能直接解决。Selenium本身没有内置功能来解决验证码,因为验证码的设计初衷就是区分人类用户和机器人。
但是,有多种方法可以在Selenium Ruby中处理验证码:
虽然Selenium Ruby本身无法解决验证码,但是有了合适的工具和服务,完全有可能自动化绕过验证码的过程,我们将在本指南中探讨这一点。
在计算机上安装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自动化整个过程?步骤如下:
display: none更改为display: block,使其可以与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 = 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:
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
接下来,我们需要将令牌输入网页,自动单击提交,并完成整个过程。让我们组合所有代码;完整的代码如下(请务必将cap_solver_api_key替换为您自己的密钥,您可以在CapSolver仪表盘中找到):
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文档了解更多信息。
比较2026年最佳AI代理框架在网页自动化、验证码解决、合规性和生产就绪代理工作流程中的表现。
