自动化测试与 CAPTCHA 识别指南

在进行自动化测试或 Web 爬取时,CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)是一个常见的挑战,旨在防止机器人自动访问某些网站。对于开发者而言,如何在合法合规的前提下处理 CAPTCHA 是一个关键问题。

CAPTCHA 的常见类型

  1. reCAPTCHA v2:要求用户点击"我不是机器人"或选择图片验证。
  2. reCAPTCHA v3:基于用户行为评分,无需用户交互。
  3. Cloudflare Turnstile:类似 reCAPTCHA,专注于无感验证。
  4. hCaptcha:类似于 reCAPTCHA,但更多用于隐私保护场景。
  5. 文本 CAPTCHA:用户需要输入图片中扭曲的字符。

处理 CAPTCHA 的常见方法

1. 使用第三方解决方案

市场上有多个 CAPTCHA 解决方案提供商,可以帮助自动化测试绕过验证,包括:

这些服务通常基于人工或 AI 解析 CAPTCHA,提供 API 供自动化工具调用。

2. 采用 Headless 浏览器优化策略

在 Selenium 或 Puppeteer 等自动化框架中,可以通过以下方法优化行为,降低被 CAPTCHA 拦截的概率:

  • 模拟真实用户行为
    • 随机鼠标移动、点击和键盘输入。
    • 适当调整访问间隔,避免固定频率操作。
  • 使用最新的浏览器指纹技术
    • 伪装 User-Agent,避免被识别为机器人。
    • 适当启用 Cookies 和 LocalStorage 记录。
  • 降低 API 请求频率
    • 避免短时间内大量访问同一页面。
    • 采用分布式 IP 或代理服务(如 BrightData、Smartproxy)。

3. 手动辅助与人工识别

对于关键任务,可以结合人工干预来解决 CAPTCHA:

  • 远程桌面手动输入:通过 RDP/VNC 远程控制,人工完成验证。
  • 团队协作:多人分工处理 CAPTCHA,以提高效率。

代码示例:Selenium 结合第三方服务

以下示例演示如何在 Selenium 中调用 2Captcha API 解决 reCAPTCHA v2:

python 复制代码
from selenium import webdriver
import time
import requests

API_KEY = "your_2captcha_api_key"
SITE_KEY = "目标网站的reCAPTCHA_SITE_KEY"
PAGE_URL = "https://example.com"

def solve_captcha():
    response = requests.post(
        f"http://xxx.com/in.php?key={API_KEY}&method=userrecaptcha&googlekey={SITE_KEY}&pageurl={PAGE_URL}&json=1"
    ).json()
    captcha_id = response["request"]
    time.sleep(20)  # 等待解析
    result = requests.get(
        f"http://xxx.com/res.php?key={API_KEY}&action=get&id={captcha_id}&json=1"
    ).json()
    return result.get("request")

# Selenium 自动化
browser = webdriver.Chrome()
browser.get(PAGE_URL)

captcha_solution = solve_captcha()
if captcha_solution:
    browser.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML = "{captcha_solution}";')
    time.sleep(2)
    browser.find_element("submit_button_selector").click()

browser.quit()

结论

在 Web 自动化中,CAPTCHA 是一道重要的安全屏障。合法合规的应对方法包括使用第三方 API、优化自动化策略、采用人工干预等。在实际应用时,建议遵守网站的使用政策,避免恶意爬取或滥用资源。

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

相关推荐
Alfadi联盟 萧瑶18 分钟前
Python-Django入手
开发语言·python·django
lwewan1 小时前
26考研——栈、队列和数组_数组和特殊矩阵(3)
数据结构·笔记·考研·算法
-代号95271 小时前
【JavaScript】十二、定时器
开发语言·javascript·ecmascript
拾零吖1 小时前
枚举算法-day2
数据结构·算法·leetcode
已经成为了代码的形状1 小时前
关于交换并查集内元素的一些题的做法
数据结构·算法
漠北尘-Gavin1 小时前
【Python3.12.9安装llama-cpp-python遇到编译报错问题解决】
python·llama
测试老哥2 小时前
什么是集成测试?集成的方法有哪些?
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·集成测试
豆芽8192 小时前
Conda配置Python环境
python·conda·pip
CANI_PLUS2 小时前
python 列表-元组-集合-字典
开发语言·python