如何在Selenium Python中获取页面跳转后的下一个重定向URL
Selenium验证码提交后URL跳转判断失效修复方案
核心问题原因
EC.url_changes()方法的作用是等待当前页面URL与传入的参考URL不一致,你错误传入了预期跳转后的目标URL,导致判断逻辑完全反向。如果提交后真的跳转到你传入的地址,url_changes反而会认为URL没有发生符合预期的变化,触发超时异常。
修复后的实现逻辑
- 第一步:提交验证码前先记录当前页面的URL作为基准参考
- 第二步:执行验证码填写、提交按钮点击操作
- 第三步:将基准URL传入
url_changes等待URL变化即可 - 若需要明确校验跳转后的目标URL是指定地址,可替换为
EC.url_to_be('预期的目标URL')
修正后代码示例
# 提交验证码前先记录当前页面URL old_url = self.driver.current_url # 执行验证码填写操作 self.Fill_captcha_function() # 点击提交按钮(此处替换为你实际的提交按钮定位逻辑) self.driver.find_element(By.ID, 'captcha_submit_btn').click() try: # 传入旧URL作为参考,等待URL发生变化,超时时间建议调整为5-10秒避免网络波动误判 WebDriverWait(self.driver, 5).until(EC.url_changes(old_url)) print('Captcha Accepted') # 如需确认跳转后的URL是指定地址,可新增以下判断 # WebDriverWait(self.driver, 3).until(EC.url_to_be('https://www.target-url.com/')) except TimeoutException: print('[Captcha Error : Solving captcha code]') # 验证失败重新触发验证码填写逻辑 self.Fill_captcha_function()
额外优化建议
- 提交按钮点击前建议增加
EC.element_to_be_clickable()等待,确保按钮处于可点击状态再触发提交,避免点击操作不生效 - 若页面跳转存在重定向链,可等待页面核心元素加载完成后再获取最终URL,避免取到中间重定向地址
- 如验证码提交后是新开标签页跳转,需要先切换到新标签页再判断URL
内容的提问来源于stack exchange,提问作者Bijaya Kumar Tiadi
相关产品推荐
相关产品推荐

