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

news/2025/3/14 1:29:45/

前言

验证码(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/news/1578939.html

相关文章

第八课:Scrapy框架入门:工业级爬虫开发

在当今大数据时代,数据抓取已成为信息获取的重要手段。Scrapy作为一个基于Python的开源网络爬虫框架,凭借其高效、灵活的特性,在工业级爬虫开发中占据重要地位。本文将详细介绍Scrapy框架的基本架构、工作流程、关键组件(如Spider…

tomcat部署springboot+vue(不使用nginx)

1、首先将springboot项目打包为war包。 注意:将application.yml文件中添加以下信息: spring.jmx.enabledfalse 避免tomcat下部署多个项目,出现org.springframework.jmx.export.UnableToRegisterMBeanException:影响项目启动。 2、前段项目打…

[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署

标题:[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署 水墨不写bug 文章目录 一、无法拷贝类(class uncopyable)的设计解释:重要思想:使用示例 二、锁的RAII设计解释重要考虑使用示例 三、基于RAII模式和互斥锁…

进程(下)【Linux操作系统】

文章目录 进程的状态R状态:S状态:D状态:T状态t状态Z状态:孤儿进程X状态: 进程的优先级如果我们要修改一个进程的优先级重置进程优先级 进程切换进程的调度 进程的状态 在内核中,进程状态的表示&#xff0c…

C#核心笔记——(五)框架概述

.NET Ftamework中几乎所有功能都是通过大量的托管类型提供的。这些类型组织在层次化的命名空间中,并打包为一套程序集,与CLR一起构成了.NET平台。 有些.NET类型是由CLR直接使用的,且对于托管宿主环境而言是必不可少的。这些类型位于一个名为…

【prompt实战】知乎问题解答专家

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权&am…

leetcode【面试经典150系列】(一)

目录 121.买卖股票最佳时机 题目描述 示例 算法分析 代码(python3) 122.买卖股票最佳时机II 题目描述 示例 算法分析 代码(python3) 55.跳跃游戏 题目描述 示例 算法分析 代码 45.跳跃游戏II 题目描述 示例 算法分析 代码 121.买卖股票…

RAG技术的PDF智能问答系统

关键要点 系统基于RAG(检索增强生成)技术,允许用户上传PDF并进行智能问答。 使用Ollama的deepseek-r1模型和FAISS向量数据库,支持普通对话和基于PDF的问答模式。 提供简洁的Web界面,支持文件拖拽上传和多轮对话。 研…