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

如何在Selenium爬虫中自动绕过验证码?实战方案咨询

解决Selenium自动化登录中的reCAPTCHA v2问题

一、从源头减少验证码触发的方法

通过优化浏览器环境和请求特征,降低被识别为机器人的概率,从而减少验证码出现的次数:

  • undetected-chromedriver:替换普通ChromeDriver,自动规避window.navigator.webdriver等WebDriver特征检测,让浏览器更接近真实用户环境。
    代码示例:

    from undetected_chromedriver import Chrome, ChromeOptions
    
    options = ChromeOptions()
    options.add_argument("--start-maximized")
    # 可选:禁用图片加载提升速度
    # options.add_argument("--blink-settings=imagesEnabled=false")
    
    driver = Chrome(options=options)
    driver.get("目标登录页面URL")
    
    # 执行登录操作
    driver.find_element("id", "username").send_keys("你的用户名")
    driver.find_element("id", "password").send_keys("你的密码")
    driver.find_element("id", "submit-btn").click()
    
  • selenium-stealth:配合undetected-chromedriver使用,进一步抹除自动化痕迹(如修改User-Agent、WebGL信息、语言设置等)。
    代码示例:

    from undetected_chromedriver import Chrome
    from selenium_stealth import stealth
    
    driver = Chrome()
    stealth(driver,
            languages=["zh-CN", "zh"],
            vendor="Google Inc.",
            platform="Win32",
            webgl_vendor="NVIDIA Corporation",
            renderer="NVIDIA GeForce GTX 1650/PCIe/SSE2",
            fix_hairline=True,
            )
    
    driver.get("目标登录页面URL")
    
  • 高匿代理IP:使用静态住宅代理(避免数据中心代理),分散请求IP,降低单IP被标记的风险。
    代码示例(undetected-chromedriver配置代理):

    from undetected_chromedriver import Chrome, ChromeOptions
    
    options = ChromeOptions()
    # 格式:http://用户名:密码@代理IP:端口
    options.add_argument("--proxy-server=http://user:pass@123.45.67.89:8080")
    
    driver = Chrome(options=options)
    driver.get("目标登录页面URL")
    

二、第三方验证码识别服务的实战方案

集成第三方验证码服务是正式环境下绕过reCAPTCHA v2的可行方案,这类服务通过人工打码或AI识别完成验证,并通过API返回结果。

主流服务对比

服务名称平均识别速度每千次识别成本支持的验证码类型
2Captcha10-30秒0.5-1美元reCAPTCHA v2/v3、hCaptcha、FunCaptcha等
Anti-Captcha8-25秒0.6-1.2美元主流验证码全覆盖,支持复杂类型
SolveCaptcha15-35秒0.4-0.9美元reCAPTCHA v2/v3、hCaptcha

其中2Captcha性价比最高,文档友好,适合新手快速集成;Anti-Captcha速度略快但成本稍高;SolveCaptcha成本最低,但复杂验证码支持度有限。

2Captcha集成代码示例

  1. 先注册2Captcha账号,获取API密钥并充值少量测试资金;
  2. 安装依赖:pip install 2captcha-python
  3. 实战代码:
from undetected_chromedriver import Chrome
from twocaptcha import TwoCaptcha
import time

# 初始化验证码客户端
api_key = "你的2Captcha API密钥"
solver = TwoCaptcha(api_key)

driver = Chrome()
driver.get("目标登录页面URL")

# 输入账号密码
driver.find_element("id", "username").send_keys("你的用户名")
driver.find_element("id", "password").send_keys("你的密码")

# 获取reCAPTCHA的sitekey和当前页面URL
site_key = driver.find_element("xpath", '//div[@class="g-recaptcha"]').get_attribute("data-sitekey")
page_url = driver.current_url

# 提交验证码识别任务
try:
    result = solver.recaptcha(sitekey=site_key, url=page_url)
    captcha_response = result['code']
except Exception as e:
    print(f"验证码识别失败: {str(e)}")
    driver.quit()
    exit()

# 将识别结果注入页面并提交
driver.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML="{captcha_response}";')
time.sleep(2)  # 等待页面验证
driver.find_element("id", "submit-btn").click()

# 验证登录状态
time.sleep(3)
if "登录成功" in driver.page_source:
    print("登录成功")
else:
    print("登录失败")

driver.quit()

三、注意事项

  • 合规风险:多数网站禁止自动化登录,使用前务必确认网站的用户协议和robots.txt规则;
  • 模拟真实操作:添加合理的操作间隔(如输入账号后停顿1-2秒),避免过于机械的请求;
  • 重试机制:给验证码识别添加重试逻辑,避免单次识别失败导致脚本终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 22:13:18