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

如何用Selenium WebDriver自动化含图片验证码的登录流程?

处理Selenium登录中无法定位的图片验证码方案

遇到这种随机字符图片验证码且无法定位元素的情况,推荐按优先级尝试以下几种方案:

1. 优先考虑绕过验证码(最高效)

这是自动化测试中最常用的思路,避免和验证码硬刚:

  • 测试环境配置:联系开发在测试环境关闭验证码功能,或者添加测试专用的白名单账号,登录时跳过验证码校验。
  • 接口层面登录:直接调用后端的登录接口完成认证,获取会话Cookie后,将Cookie注入到Selenium的浏览器实例中,跳过前端登录流程:
    import requests
    from selenium import webdriver
    
    # 调用登录接口获取Cookie
    login_data = {"username": "test_user", "password": "test_pwd"}
    response = requests.post("https://your-site.com/api/login", data=login_data)
    session_cookie = response.cookies.get("sessionId")  # 根据实际Cookie名调整
    
    # 初始化浏览器并注入Cookie
    driver = webdriver.Chrome()
    driver.get("https://your-site.com")
    driver.add_cookie({"name": "sessionId", "value": session_cookie, "domain": "your-site.com"})
    driver.refresh()  # 刷新后已处于登录状态
    
  • 使用记住登录状态:第一次手动登录后,保存浏览器的用户数据目录,后续Selenium启动时加载该目录,直接复用登录状态:
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument(r"user-data-dir=C:\Users\YourName\AppData\Local\Google\Chrome\User Data")  # 替换为你的Chrome数据目录
    driver = webdriver.Chrome(options=options)
    driver.get("https://your-site.com")  # 直接进入登录后的页面
    

2. OCR识别简单验证码

如果必须处理验证码,对字符清晰、无复杂干扰的图片验证码,可以用Tesseract OCR工具:

  • 步骤:截图验证码区域 → 图片预处理(灰度化、降噪)→ OCR识别 → 输入验证码
  • 示例代码:
    from selenium import webdriver
    from PIL import Image
    import pytesseract
    
    # 先截图整个页面
    driver.save_screenshot("full_page.png")
    # 手动确定验证码在页面中的坐标范围(x1, y1为左上角,x2, y2为右下角)
    captcha_coords = (200, 300, 400, 350)
    img = Image.open("full_page.png")
    captcha_img = img.crop(captcha_coords)
    # 预处理:转灰度、提高对比度
    captcha_img = captcha_img.convert("L").point(lambda x: 0 if x < 127 else 255)
    captcha_img.save("processed_captcha.png")
    # 识别验证码
    captcha_text = pytesseract.image_to_string("processed_captcha.png").strip()
    # 输入到验证码框
    driver.find_element_by_id("captcha_input").send_keys(captcha_text)
    
    注意:这种方法对有扭曲、干扰线的验证码识别率极低,仅适用于简单场景。

3. 第三方验证码识别服务

针对复杂验证码(扭曲、干扰、滑块等),可以使用付费的第三方识别服务,这类服务通过人工或AI模型识别验证码,返回结果后再输入到页面。但需要注意成本和数据隐私风险,不建议在生产环境使用。

4. 手动介入调试

如果只是小范围测试或调试,可以在验证码出现时暂停脚本,手动输入后继续:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://your-site.com/login")
# 输入用户名密码
driver.find_element_by_id("username").send_keys("test_user")
driver.find_element_by_id("password").send_keys("test_pwd")
# 点击登录
driver.find_element_by_id("login_btn").click()
# 暂停脚本,等待手动输入验证码
input("请在页面中输入验证码后按回车键继续...")
# 继续后续自动化操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:40:01