You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用2Captcha Python API识别验证码遇下载失败问题求助

解决验证码图片下载失败问题

问题根源

直接请求验证码图片URL时,服务器会验证请求的会话合法性——浏览器访问验证码展示页面时会生成会话Cookie,而你的代码没有携带这些Cookie,导致服务器返回的不是有效图片数据(可能是错误页面或空内容),所以PIL无法识别。

解决方案

使用requests.Session()维持会话,先访问验证码展示页面获取会话Cookie,再请求图片URL:

步骤1:获取会话并下载验证码图片

import requests
from PIL import Image
from io import BytesIO

# 初始化会话
session = requests.Session()

# 先访问验证码展示页面,获取会话Cookie
captcha_page_url = 'https://v2.gcchmc.org/book-appointment/'
session.get(captcha_page_url)

# 再请求验证码图片
captcha_img_url = 'https://v2.gcchmc.org/captcha/image/aa699f305917812978c911e87ab126a782f726e7/'
response = session.get(captcha_img_url)

# 验证响应是否为图片
if response.headers.get('Content-Type').startswith('image/'):
    img = Image.open(BytesIO(response.content))
    img.save('output.png')
    print("图片下载成功")
else:
    print(f"返回内容不是图片,Content-Type: {response.headers.get('Content-Type')}")
    print("响应内容:", response.text[:500])  # 打印前500字符排查问题

步骤2:将本地图片传给2Captcha识别

修改2Captcha代码,使用本地图片路径代替URL:

import sys
import os

sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
from twocaptcha import TwoCaptcha

solver = TwoCaptcha(apikey)

try:
    # 传入本地图片路径
    result = solver.normal('output.png')
except Exception as e:
    sys.exit(e)
else:
    sys.exit('solved: ' + str(result))

额外说明

  • 验证码URL中的哈希值(aa699f305917812978c911e87ab126a782f726e7)和会话绑定,每次会话会生成新的哈希值,实际使用时需要从页面中动态提取该URL,不要硬编码。
  • 如果仍失败,可添加User-Agent请求头模拟浏览器:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
    session.get(captcha_page_url, headers=headers)
    response = session.get(captcha_img_url, headers=headers)
    

内容的提问来源于stack exchange,提问作者farhan jatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:35:16