如何在 Selenium 自动化脚本中合法、可靠地处理 CAPTCHA

秋强同学_3941

秋强同学_3941

2026-03-28

299人浏览

原创

如何在 Selenium 自动化脚本中合法、可靠地处理 CAPTCHA

captcha 是专为阻止自动化访问而设计的安全机制,无法(也不应)被绕过;正确做法是通过测试环境隔离、后门机制或官方 api 支持来规避其干扰,确保自动化流程合规、稳定且可持续。

captcha 是专为阻止自动化访问而设计的安全机制,无法(也不应)被绕过;正确做法是通过测试环境隔离、后门机制或官方 api 支持来规避其干扰,确保自动化流程合规、稳定且可持续。

在使用 Python + Selenium 构建网页自动化脚本时,遇到 Google reCAPTCHA 或其他形式的验证码(CAPTCHA)是常见痛点。但需明确一个核心原则:CAPTCHA 的本质就是对抗自动化——任何试图“破解”或“绕过”它的技术手段,不仅违背网站服务条款,还可能触碰法律红线(如违反《计算机欺诈与滥用法》或 GDPR 相关规定),且极不可靠。

为什么“绕过 CAPTCHA”不是可行方案?

  • ? 技术对抗性极强:reCAPTCHA v3(无感验证)、v2(复选框)及 hCaptcha 等均依赖行为分析、设备指纹、TLS 指纹、鼠标轨迹等多维信号,纯 Selenium 脚本几乎必然被识别为机器人。
  • ⚙️ 动态失效快:即使某开源库(如 2captcha 或 anti-captcha)曾短暂有效,其底层识别接口也常因目标网站策略更新而迅速失效。
  • ? 违反 ToS 与风控风险:多数主流网站(Google、Cloudflare、Shopify 等)明文禁止自动化绕过验证,触发后可能导致 IP 封禁、账号冻结,甚至法律追责。

合规、可持续的替代方案

✅ 1. 测试环境专用绕过机制(推荐首选)
若你正在自动化测试自己开发的网站,应在开发阶段集成可配置的 CAPTCHA 绕过逻辑:

# 示例:Django 项目中通过环境变量禁用 reCAPTCHA
# settings.py
RECAPTCHA_ENABLED = not DEBUG or os.getenv("DISABLE_RECAPTCHA") == "true"

# 前端模板中条件渲染
{% if RECAPTCHA_ENABLED %}
  <div class="g-recaptcha" data-sitekey="..."></div>
{% else %}
  <input type="hidden" name="recaptcha_response" value="test_token">
{% endif %}

后端验证逻辑同步适配:

# views.py
def submit_form(request):
    if settings.RECAPTCHA_ENABLED:
        token = request.POST.get('g-recaptcha-response')
        if not verify_recaptcha(token):  # 调用 Google 验证 API
            return HttpResponseForbidden("Invalid CAPTCHA")
    # 正常处理表单...

✅ 2. 使用官方测试密钥(如 Google reCAPTCHA)
Google 提供专用于测试的固定密钥对:

类型 Site Key(前端) Secret Key(后端)
测试模式 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

✅ 3. 集成受信验证码服务(仅限生产级自动化场景)
若必须在第三方网站完成自动化(如内部运维工具),且已获明确授权,可选用合规服务商(如 2Captcha、Anti-Captcha)提供的人工/OCR 解析 API,并严格遵守其调用频率与用途限制:

import requests
import time

def solve_captcha(site_key, page_url):
    # 注册后获取 API key
    api_key = "YOUR_API_KEY"
    # 提交任务
    resp = requests.post(
        "https://www.php.cn/link/c33e9b25de934b77fa6aaee26939d8f1in.php",
        data={
            "key": api_key,
            "method": "userrecaptcha",
            "googlekey": site_key,
            "pageurl": page_url,
            "json": 1
        }
    ).json()

    if resp["status"] != 1:
        raise Exception(f"Task creation failed: {resp['request']}")

    task_id = resp["request"]
    # 轮询结果(最多等待 120 秒)
    for _ in range(12):
        time.sleep(10)
        result = requests.get(
            f"https://www.php.cn/link/c33e9b25de934b77fa6aaee26939d8f1res.php?key={api_key}&action=get&id={task_id}&json=1"
        ).json()
        if result["status"] == 1:
            return result["request"]
    raise Exception("CAPTCHA solving timeout")

⚠️ 重要提醒:此方式仍需目标网站允许第三方解析(通常不满足),且存在隐私与数据合规风险,绝不适用于用户数据采集、爬虫或未授权自动化行为。

总结:坚持自动化伦理与工程最佳实践

  • ❌ 永远不要尝试逆向、模拟或暴力破解 CAPTCHA;
  • ✅ 优先在自有系统中设计可开关的验证机制;
  • ✅ 利用厂商提供的测试凭证与沙箱环境;
  • ✅ 若涉及第三方平台,优先寻求其官方 API 或合作渠道;
  • ✅ 所有自动化行为必须符合《robots.txt》、网站 Terms of Service 及适用法律法规。

自动化的目标是提效与可靠,而非突破边界。尊重安全机制,才是长期构建健壮脚本的基石。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1851

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4984

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1789

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

29937

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3567

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3587

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1223

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2783

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习