Selenium自动化下如何等待用户手动完成captcha校验后继续执行流程
手动介入完成验证码的Selenium自动化流程适配方案
核心实现思路
本质是在自动化流程跑到验证码节点时,临时让出操作控制权给用户,不通过写死的延时硬等,而是精准识别网站在验证码校验通过后的页面状态变化,一旦检测到该状态就自动切回自动化执行后续步骤,完全避免无意义的等待或提前误触发流程。
具体落地步骤
- 提前梳理状态锚点:先手动过一遍目标网站的全流程,把两个关键状态的元素特征记下来:一是验证码节点的识别特征(比如验证码输入框的定位路径、验证码模块的专属类名),二是验证码校验通过后的独有标识——比如校验成功才会跳转到的页面路径、只有校验通过才会显示的功能按钮、校验成功后才会触发的弹窗提示,这个标识是判断用户操作完成的核心依据,不能随便选。
- 加节点识别的触发逻辑:当Selenium检测到页面加载完成、且命中了之前记录的验证码节点特征时,立刻暂停所有自动操作逻辑,保留当前WebDriver的浏览器会话不重置、不关闭,在控制台输出明确提示告知用户可以在当前弹出的浏览器窗口中手动完成验证码输入和提交操作。
- 配置显式等待逻辑:抛弃
time.sleep()这类固定延时的写法,用Selenium自带的显式等待机制持续轮询页面状态,直到检测到之前记录的“校验成功标识”再继续跑后续流程。轮询参数可以根据实际需求调整,示例代码如下:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC # 最多等待10分钟,每0.5秒检测一次页面状态 WebDriverWait(driver, timeout=600, poll_frequency=0.5).until( # 等待条件:页面出现登录成功后才会加载的控制台元素 EC.visibility_of_element_located((By.ID, "user_dashboard_entry")) ) - 补充异常兜底分支:把“验证码校验失败”的提示元素也加入状态检测逻辑,一旦检测到失败提示,不终止等待流程,继续保持等待状态直到检测到成功标识,适配用户多次输错验证码的场景。可以额外加一个控制台手动触发的中断开关,遇到特殊情况可以手动终止等待流程,不用重启整个程序。
实操避坑要点
- 挂起等待的整个过程中,不要执行任何自动刷新、随机点击、元素定位操作,很容易打断用户的手动输入,甚至触发网站的安全风控机制。
- 绝对不要把“验证码输入框非空”作为等待结束的判断条件,这个判断逻辑完全不可靠——用户可能输入了错误的验证码、甚至还没点提交按钮,输入框有值但校验根本没完成,程序就会误判提前往下走。必须以后端校验完成带来的页面状态变化作为唯一判断依据。
- 等待超时时间要预留足够余量,普通验证码的手动输入过程可能需要30秒到2分钟,超时时间至少设为5-10分钟,避免用户还没操作完程序就抛出超时异常。
- 如果默认用了无界面模式跑WebDriver,要在检测到验证码节点时自动切换为有界面模式,不然用户看不到浏览器窗口,根本没法完成手动输入。
内容的提问来源于stack exchange,提问作者CrispyNuggets
相关产品推荐
相关产品推荐

