如何使用 Ruby 中的 Selenium 解决 CAPTCHA

2024-09-05 12:28

本文主要是介绍如何使用 Ruby 中的 Selenium 解决 CAPTCHA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

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 中处理验证码有几种方法:

  1. 手动干预: 在某些情况下,开发人员会在自动化过程中手动解决验证码。但是,这违背了完全自动化的目的。
  2. 第三方验证码求解器: 最有效的方法是集成像 CapSolver 这样的第三方服务,它们专门使用高级算法和人工智慧来解决验证码。
  3. 解决简单的验证码: 对于非常基本的文本验证码,开发人员可能会编写自定义脚本以识别模式,尽管这种方法有限且通常不可靠。

虽然 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 驱动程序。您可以在以下位置找到下载链接:

  • 下载链接 1: 提供最新稳定版、测试版、开发版和 Canary 版的驱动程序。
  • 下载链接 2:提供从 113 版开始的所有驱动程序。
  • 下载链接 3:提供 113 版之前的驱动程序。

分析目标网站

我们将使用网站 https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php 作为示例,使用 Ruby Selenium 解决 reCAPTCHA。

在开始之前,我们需要了解 HTML 表单提交的基础知识。通过观察此页面并打开开发者工具,我们可以手动解决 reCAPTCHA,然后单击提交按钮。此操作会发送一个 POST 请求,提交三个字段:ex-aex-bg-recaptcha-response,如下所示:

在这里插入图片描述

这三个字段对应于初始 HTML 源代码中表单下方的两个输入元素和一个文本区域元素,如下所示:

在这里插入图片描述

使用 Ruby Selenium 自动化流程

如何使用 Ruby Selenium 自动化整个过程?步骤如下:

  1. Ruby 驱动 Selenium 访问目标网站。
  2. Ruby 调用 CapSolver API 解决 reCAPTCHA 并获取令牌。
  3. 将 textarea 元素的 CSS 样式从 display: none 更改为 display: block,使其可与 Selenium 交互。
  4. 模拟将 CapSolver 返回的令牌输入 textarea 元素。
  5. 模拟单击提交按钮以提交表单并完成验证。

使用 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 = 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,}}# 发送任务创建请求
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_idputs "创建任务失败: #{res.body}"returnendputs "获取到 taskId: #{task_id}"# 循环等待获取任务结果loop dosleep(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 "解决成功,token: #{token}"return tokenelsif status == "processing"puts "正在解决..."elsif status == "failed"puts "解决失败!响应: #{res.body}"returnendend
end# 将 token 输入网页,自动点击提交,完成整个流程。
# 以下是完整代码(请确保将 `cap_solver_api_key` 替换为您自己的密钥,可以在 CapSolver 仪表板中找到):# 使用 Selenium 库自动操作浏览器
driver = Selenium::WebDriver.for :chrome
driver.get("https://www.example.com") # 将示例网站替换为您的目标网站# 等待 reCAPTCHA 出现
wait = Selenium::WebDriver::Wait.new(timeout: 10)
wait.until { driver.find_element(css: '#g-recaptcha-response') }# 运行 CapSolver 函数获取 token
token = cap_solver("cap_solver_api_key", "website_key", "https://www.example.com") # 替换为您的 API 密钥、网站密钥和网站 URL# 将 token 输入 reCAPTCHA 响应框
driver.find_element(css: '#g-recaptcha-response').send_keys(token)# 点击提交按钮
driver.find_element(css: 'button[type="submit"]').click# 等待页面加载完成
wait.until { driver.find_element(css: 'body') }# 完成
puts "页面已成功提交。"
driver.quit
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 tokenelsif status == "processing"puts "Solve in progress..."elsif status == "failed"puts "Solve failed! response: #{res.body}"returnendend
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.getsdriver.quitreturn
end# 将文本区域的显示样式属性更改为块,使其可见
driver.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';")
# 模拟将 token 输入到文本区域
textarea = driver.find_element(id: 'g-recaptcha-response')
textarea.send_keys(token)
# 模拟点击并提交表单
submit_btn = driver.find_element(css: "button[type='submit']")
submit_btn.clickputs "Press any key to exit."
STDIN.gets
driver.quit

更多信息

CapSolver 使用基于 AI 的自动网页解锁技术,帮助您在几秒钟内解决 CAPTCHA。它不仅可以解决 reCAPTCHA,还可以解决 hCaptcha、Geetest、Cloudflare Turnstile、DataDome、AWS WAF 等。CapSolver 还提供多种语言的 SDK 以及浏览器扩展。您可以参考CapSolver 文档 获取更多信息。

CapsolverCN官 方代理交流扣 群:497493756

这篇关于如何使用 Ruby 中的 Selenium 解决 CAPTCHA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138955

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti