绕过 reCAPTCHA V2/V3:Python、Selenium 指南

前言

验证码(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 time

API_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':
            continue
        else:
            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 的一些方法:

  1. 使用验证码解决服务

支持 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':
            continue
        else:
            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 示例代码:

javascript 复制代码
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

相关推荐
江城开朗的豌豆35 分钟前
JavaScript篇:构造函数 vs Class:谁才是对象创建的王者?
前端·javascript·面试
江城开朗的豌豆38 分钟前
JavaScript篇:数组找不同:如何快速找出两个数组间的'单身狗'元素?
前端·javascript·面试
几道之旅39 分钟前
python-pptx去除形状默认的阴影
开发语言·javascript·python
不吃鱼的羊1 小时前
ISOLAR软件生成报错处理(七)
java·前端·javascript
2301_778658801 小时前
【Python训练营打卡】day40 @浙大疏锦行
python
TE-茶叶蛋2 小时前
React-props
前端·javascript·react.js
安分小尧2 小时前
[特殊字符] 超强 Web React版 PDF 阅读器!支持分页、缩放、旋转、全屏、懒加载、缩略图!
前端·javascript·react.js
西京刀客2 小时前
python常用库-pandas、Hugging Face的datasets库(大模型之JSONL(JSON Lines))
python·json·数据集·pandas·模型训练·datasets
EndingCoder2 小时前
React从基础入门到高级实战:React 高级主题 - React Concurrent 特性:深入探索与实践指南
前端·javascript·react.js·前端框架
EndingCoder2 小时前
React从基础入门到高级实战:React 生态与工具 - React Query:异步状态管理
前端·javascript·react.js·前端框架