自动化测试与 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

相关推荐
爱coding的橙子2 小时前
每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)
算法·leetcode
码上淘金3 小时前
【Python】Python常用控制结构详解:条件判断、遍历与循环控制
开发语言·python
Brilliant Nemo3 小时前
四、SpringMVC实战:构建高效表述层框架
开发语言·python
2301_787552874 小时前
console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
人工智能·python·gpt·开源·自动化
懵逼的小黑子4 小时前
Django 项目的 models 目录中,__init__.py 文件的作用
后端·python·django
Y3174294 小时前
Python Day23 学习
python·学习
a濯5 小时前
element plus el-table多选框跨页多选保留
javascript·vue.js
Ai尚研修-贾莲5 小时前
Python语言在地球科学交叉领域中的应用——从数据可视化到常见数据分析方法的使用【实例操作】
python·信息可视化·数据分析·地球科学
qq_508576096 小时前
if __name__ == ‘__main__‘
python
学地理的小胖砸6 小时前
【Python 基础语法】
开发语言·python