如何绕过 reCAPTCHA V2/V3:Python、Selenium 与其他工具的实战指南

server/2025/3/16 23:34:35/

前言

验证码(CAPTCHA)技术已经存在多年,尽管它的有效性一直备受争议,但许多网站仍然依赖它来保护资源。特别是 Google 推出的 reCAPTCHA 系列,一直是验证码领域的领跑者。本文将探讨如何绕过 reCAPTCHA V2 和 V3,并提供实用的代码示例。

详情请见:解决验证码recaptcha、cloudflare、incapsula


1. 什么是 reCAPTCHA?

reCAPTCHA 是 Google 推出的验证码技术,旨在通过验证用户行为来区分人类与机器人。它目前有三个主要版本:

  • reCAPTCHA V1:基于扭曲文本的传统验证码(已淘汰)。
  • reCAPTCHA V2:用户需要点击复选框或完成图片任务。
  • reCAPTCHA V3:无感验证,通过用户行为生成风险评分。

2. 绕过 reCAPTCHA 的方法

2.1 绕过 reCAPTCHA V2

reCAPTCHA V2 的工作原理

reCAPTCHA V2 主要通过以下两种形式验证用户:

  1. 复选框验证:“我不是机器人”按钮,点击即可通过。
  2. 图片任务:用户需要从图片中选择特定对象(如交通信号灯、斑马线等)。

尽管 reCAPTCHA V2 提升了用户体验,但它仍然存在被自动化工具绕过的可能。

绕过方法

以下是一些常用的绕过方法:

  1. 使用 nocaptcha服务

nocaptcha 是一个流行的验证码解决服务,支持多种编程语言。以下是 Python 示例代码:

python">import requests
import timeAPI_KEY = 'Your_API_2Captcha_key'def solve_recaptcha_v2(site_key, url):payload = {'key': API_KEY,'method': 'userrecaptcha','googlekey': site_key,'pageurl': url,'json': 1}response = requests.post('https://.com/in.php', data=payload)result = response.json()if result['status'] != 1:raise Exception(f"Error when sending captcha: {result['request']}")captcha_id = result['request']while True:time.sleep(5)response = requests.get(f"https://.com/res.php?key={API_KEY}&action=get&id={captcha_id}&json=1")result = response.json()if result['status'] == 1:return result['request']elif result['request'] == 'CAPCHA_NOT_READY':continueelse:raise Exception(f"Error while solving captcha: {result['request']}")site_key = 'your_site_key_v2'
url = 'https://example.com'
token = solve_recaptcha_v2(site_key, url)
print(f"Received token: {token}")
  1. Selenium 自动化

Selenium 是一个强大的浏览器自动化工具,可以模拟用户行为完成验证。


2.2 绕过 reCAPTCHA V3

reCAPTCHA V3 的工作原理

与 V2 不同,reCAPTCHA V3 是无感验证,系统会根据用户行为生成 0.1 到 1.0 的风险评分。分数越高,用户越可能是真人。

绕过方法

同样支持 reCAPTCHA V3。以下是 Python 示例:

python">def solve_recaptcha_v3(site_key, url, action='verify', min_score=0.3):payload = {'key': API_KEY,'method': 'userrecaptcha','googlekey': site_key,'pageurl': url,'version': 'v3','action': action,'min_score': min_score,'json': 1}response = requests.post('https://2captcha.com/in.php', data=payload)result = response.json()if result['status'] != 1:raise Exception(f"Error when sending captcha: {result['request']}")captcha_id = result['request']while True:time.sleep(5)response = requests.get(f"https://2captcha.com/res.php?key={API_KEY}&action=get&id={captcha_id}&json=1")result = response.json()if result['status'] == 1:return result['request']elif result['request'] == 'CAPCHA_NOT_READY':continueelse:raise Exception(f"Error while solving captcha: {result['request']}")site_key = 'your_site_key_v3'
url = 'https://example.com'
token = solve_recaptcha_v3(site_key, url)
print(f"Received token: {token}")
  1. 模拟用户行为

通过 Selenium 或 Puppeteer 模拟用户行为,避免触发高风险评分。

详情请见:解决验证码recaptcha、cloudflare、incapsula


3. 其他语言的实现

JavaScript

在 Node.js 中,可以使用以下模块:

  • 2captcha:官方模块,支持 TypeScript。
  • captcha-solver:集成 Puppeteer,提供开箱即用的解决方案。

以下是 Node.js 示例代码:

const axios = require('axios');
const sleep = require('util').promisify(setTimeout);const API_KEY = 'YOUR_API_KEY_2CAPTCHA';async function solveReCaptchaV2(siteKey, pageUrl) {const sendCaptchaResponse = await axios.post('http://2captcha.com/in.php', null, {params: {key: API_KEY,method: 'userrecaptcha',googlekey: siteKey,pageurl: pageUrl,json: 1}});const requestId = sendCaptchaResponse.data.request;while (true) {await sleep(5000);const getResultResponse = await axios.get('http://2captcha.com/res.php', {params: {key: API_KEY,action: 'get',id: requestId,json: 1}});if (getResultResponse.data.status === 1) {return getResultResponse.data.request;} else if (getResultResponse.data.request === 'CAPCHA_NOT_READY') {continue;} else {throw new Error(`Error while solving captcha: ${getResultResponse.data.request}`);}}
}(async () => {const siteKey = 'YOUR_SITE_KEY';const pageUrl = 'https://example.com';const token = await solveReCaptchaV2(siteKey, pageUrl);console.log(`Received token: ${token}`);
})();

详情请见:解决验证码recaptcha、cloudflare、incapsula


http://www.ppmy.cn/server/175556.html

相关文章

【C】嵌入式的中断,理解

🚀 嵌入式中断(Interrupt)概念解析 在嵌入式系统中,中断(Interrupt)是一种硬件或软件事件,它可以打断 CPU 的正常运行流程,立即执行特定的中断服务程序(ISR,…

TTP/HTTPS、TCP/IP 协议、RPC、Socket 通信机制

1. TTP/HTTPS TTP (HTTP) 和 HTTPS(Hypertext Transfer Protocol Secure)是基于 TCP/IP 协议的应用层协议,主要用于客户端和服务器之间的数据传输。 HTTP(超文本传输协议):这是用于 web 页面和服务器之间…

三角函数:从宇宙法则到AI革命的数学密钥

——跨越三千年的数学语言与现代科技全景透视 一、数学本质:宇宙的波动密码 1.1 拓扑学视角下的三角函数 三角函数本质是单位圆上点的坐标参数化,其数学表达可抽象为: { x cos ⁡ θ ℜ ( e i θ ) y sin ⁡ θ ℑ ( e i θ ) \begin…

MKS HA-MFV:半导体制造中的高精度流量验证技术解析

引言 在半导体先进制程(如3nm节点)中,工艺气体流量的精准控制直接决定刻蚀、沉积等关键步骤的均匀性和良率。MKS Instruments推出的 HA-MFV(High Accuracy Mass Flow Verifier) 通过创新设计解决了传统流量验证技术的…

C++程序设计语言笔记——抽象机制:构造、清理、拷贝和移动

0 应该将构造函数、赋值操作以及析构函数设计为一组匹配的操作。 在C中,构造函数、赋值操作符和析构函数共同管理对象的资源生命周期。为确保资源安全且一致地处理,需将它们作为一组匹配的操作设计。以下是关键要点: 为何需要协同设计&…

C# NX二次开发:在多个体的模型中如何实现拉伸操作布尔减

大家好,今天接着上一篇拉伸文章去讲。 UF_MODL_create_extruded1 (view source) uf_list_p_tobjectsInputList of objects to be extruded.char *taper_angleInputTaper angle (in degrees).char *limit [ 2 ]InputLimit of extrusion. This is declared as: char …

C 语 言 --- 二 维 数 组 的 应 用

C 语 言 --- 二 维 数 组 的 应 用 第 一 题 - - - 冒 泡 排 序冒 泡 排 序冒 泡 排 序 的 原 理 第 二 题 - - - 回 型 矩 阵特 点 第 三 题 - - - 蛇 形 矩 阵总结 💻作者简介:曾 与 你 一 样 迷 茫,现 以 经 验 助 你 入 门 C 语 言 &…

RK3588 openssl-3.4.1 编译安装

安装依赖 sudo apt update && sudo apt install build-essential perl libtext-template-perl -y 下载并解压源码 wget https://www.openssl.org/source/openssl-3.4.1.tar.gz tar -xzf openssl-3.4.1.tar.gz && cd openssl-3.4.1 配置编译选项 ./config --…