Python爬虫遇到高级验证码怎么办?

无论什么语言或者框架 爬虫对于那些复杂度较高的滑动验证码 或者 reCAPTCHA 这种 是不是只能通过收费打码平台来实现?如果成本不允许那么就只能 game over 了?
Python爬虫遇到高级验证码怎么办?

10 回复

这个头像是随机生成的还是你改造的。挺像狗头


遇到高级验证码(如滑块、点选、文字扭曲等),常规请求库直接失效。核心思路是:识别+模拟

1. 识别方案

  • OCR工具:Tesseract(免费,但复杂验证码效果差)
  • 深度学习模型:训练CNN识别字符验证码(需标注数据)
  • 第三方API:打码平台(如超级鹰、2captcha)——最实用,按次付费

2. 模拟方案

  • Selenium/Playwright:完全模拟浏览器操作,可手动处理验证码(适合低频)
  • 逆向JS:分析验证码生成/验证逻辑,直接复现加密参数(高效但难度大)

示例:使用Selenium+打码平台处理点选验证码

from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import time

# 打码平台API(以超级鹰示例)
def crack_captcha(img_path):
    url = "http://api.chaojiying.com/upload/"
    params = {
        "user": "your_username",
        "pass2": "your_password",
        "softid": "96001",  # 软件ID需注册获取
        "codetype": 9004  # 点选类型编码
    }
    with open(img_path, "rb") as f:
        files = {"userfile": f}
        resp = requests.post(url, data=params, files=files)
    return resp.json()["pic_str"]  # 返回坐标串 "x1,y1|x2,y2"

# 浏览器自动化
driver = webdriver.Chrome()
driver.get("https://target-site.com")
time.sleep(2)

# 截图验证码区域
captcha_elem = driver.find_element(By.ID, "captcha_image")
captcha_elem.screenshot("captcha.png")

# 调用打码平台
points = crack_captcha("captcha.png")  # 格式如 "120,45|200,80"
for point in points.split("|"):
    x, y = point.split(",")
    # 在对应坐标模拟点击
    action = webdriver.ActionChains(driver)
    action.move_to_element_with_offset(captcha_elem, int(x), int(y)).click().perform()
    time.sleep(0.5)

# 提交验证
driver.find_element(By.ID, "submit_btn").click()

总结:高频爬取建议逆向JS+打码API,低频需求用自动化工具更省事。

系统生成的

reCAPTCHA 的话 v3 暂时无解,v2 的话可以用语音无障碍验证,然后再转文字输进去,v1 的网站基本绝迹了。国内的几家主要滑动验证码提供商怎么滑网上都有,另外根据你的描述并不知道什么是"复杂度较高的滑验",是得模拟真人拉动,还是你的爬虫卡不了位?

滑验这个搜了一下确实有解决方案 之前还碰到那种出九宫格选项让你选择的 人工点实在费劲。

又不贵,1000 个才不到 $2

好奇什么数据价值那么低又值得去爬,还是说一直都用免费的黑服务器所以从来没有过支出所以不能接受?

能不能用 cookie 池 跳过验证

貌似 不能

所以有实例吗?最近我也弄验证码这个

回到顶部