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

如何让Python+Selenium脚本等待验证码解锁后的目标元素?

如何让Selenium脚本无限等待,直到手动完成验证码后目标元素加载完成

你的代码出现报错的核心原因是:driver.find_element_by_css_selector()在找不到目标元素时,不会返回False,而是直接抛出NoSuchElementException异常,导致你的while循环根本无法正常执行下去。

下面给你两种可行的解决方案,都能实现“无限等待,直到手动完成验证码、目标元素出现后脚本继续执行”的需求:

方案1:使用try-except循环捕获异常(真正的无限等待)

这种方式会持续尝试查找元素,直到成功找到为止,完全没有超时限制,适合需要无限等待的场景:

import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

URL = "https://www.someurl.com/"
driver = webdriver.Chrome()
driver.get(URL)

print("请手动完成验证码验证,完成后脚本会自动继续...")
while True:
    try:
        # 尝试定位目标元素
        target_element = driver.find_element_by_css_selector(".listing-content")
        print("目标元素已加载完成!")
        break  # 找到元素后跳出循环
    except NoSuchElementException:
        # 未找到元素时,等待1秒后重试
        time.sleep(1)

# 后续业务逻辑
print(driver.current_url)
driver.quit()

方案2:使用Selenium显式等待(设置超长超时时间)

如果你可以接受一个足够长的超时限制(比如1小时),Selenium官方推荐的WebDriverWait显式等待会更优雅:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

URL = "https://www.someurl.com/"
driver = webdriver.Chrome()
driver.get(URL)

print("请手动完成验证码验证,完成后脚本会自动继续...")
# 设置最长等待3600秒(1小时),直到目标元素出现在DOM中
target_element = WebDriverWait(driver, 3600).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".listing-content"))
)

print("目标元素已加载完成!")
# 后续业务逻辑
print(driver.current_url)
driver.quit()

补充说明

  • 方案1的try-except循环是真正的无限等待,只要你不手动终止脚本,它会一直尝试查找元素;
  • 方案2的WebDriverWait需要设置一个最大超时时间,超时后会抛出TimeoutException,但3600秒的时长足够绝大多数手动验证码操作;
  • 两种方案都能让你有足够时间手动完成验证码验证,之后脚本会自动继续执行。

内容的提问来源于stack exchange,提问作者robots.txt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:23:07