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

Selenium Python:每日启动浏览器后10秒轮询XPath异常处理

解决方案:每日定时启动浏览器并轮询检测元素

你的核心问题是没有实现启动浏览器后的持续轮询逻辑,原代码仅在浏览器启动时检测一次元素,之后就结束了。下面是修正后的完整代码,同时优化了几个细节:

关键修改点

  • 新增浏览器启动后的10秒轮询循环,持续检测指定XPath元素
  • 用WebDriver自带的driver.refresh()替代pyautogui坐标点击,避免屏幕分辨率变化导致的失效
  • 确保NoSuchElementException正确导入,修复原代码可能的异常捕获失效问题
  • 补充完整URL协议,避免浏览器无法正确访问目标页面

修正后的代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException  # 必须导入该异常
from webdriver_manager.chrome import ChromeDriverManager
import schedule
import time

def code():
    options = Options()
    options.add_experimental_option("detach", True)

    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),
                              options=options)

    driver.get("https://example.com")  # 补充完整URL协议
    driver.set_window_position(0, 0)
    driver.set_window_size(750, 512)

    # 启动持续轮询逻辑
    while True:
        try:
            # 检测指定XPath元素
            driver.find_element(By.XPATH, "/html/body/div/div/div/div/div[2]/div/div/div[2]/div[2]/div[1]/span/button/span")
            print("元素检测成功,等待下一次轮询")
        except NoSuchElementException:
            print("未检测到元素,执行刷新操作")
            driver.refresh()  # 用WebDriver原生方法刷新,比pyautogui更可靠
        
        time.sleep(10)  # 每10秒轮询一次

# 每日19:37启动任务
schedule.every().day.at("19:37").do(code)

# 保持调度器运行
while True:
    schedule.run_pending()
    time.sleep(1)

额外说明

  1. 轮询终止设置:如果需要在检测到元素后停止轮询,可以在print("元素检测成功...")后添加break语句
  2. 异常扩展捕获:若担心其他未知异常导致程序崩溃,可在NoSuchElementException捕获后添加except Exception兜底,但不建议滥用
  3. pyautogui替代原因:坐标点击依赖当前屏幕分辨率和窗口固定位置,一旦窗口移动或分辨率调整就会失效,而driver.refresh()直接操作浏览器,稳定性和通用性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:12:34