Python Selenium:如何延迟检查has-message类避免误触发页面刷新?
解决Unifi Camera Selenium脚本误刷新问题
问题分析
当前脚本会在页面加载初期就检查.has-message类,但该类会短暂出现导致误刷新,需要延迟约1分钟后再执行该检查逻辑。
修改后的脚本
我们可以通过记录页面关键操作的时间点,确保只有在页面稳定运行1分钟后再检查错误提示,避免误触发刷新:
from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep, time driver = webdriver.Chrome("**%path%**/chromedriver.exe") script_active = True page_stable_time = time() # 记录页面进入稳定状态的时间 driver.get("https://%url%/login") driver.maximize_window() # 最大化窗口 while script_active: if driver.find_elements(By.CSS_SELECTOR, '#enhanced-protection-message'): driver.find_element(By.ID, "details-button").click() driver.find_element(By.ID, "proceed-link").click() print("SUCCESS : 绕过安全验证") sleep(5) page_stable_time = time() # 操作完成后重置稳定时间 if driver.find_elements("name", 'username'): driver.find_element("name", "username").send_keys("%username%") driver.find_element("name", "password").send_keys("%password%") driver.find_element(By.CSS_SELECTOR, "input[type='submit']").click() print("SUCCESS : 登录成功") sleep(3) page_stable_time = time() # 登录后重置稳定时间 if driver.find_elements(By.CLASS_NAME, 'mainSubView--cameras'): driver.find_element(By.CLASS_NAME, "ubnt-icon--live-view").click() print("SUCCESS : 切换到实时视图") sleep(3) page_stable_time = time() # 切换视图后重置稳定时间 if driver.find_elements(By.CLASS_NAME, 'ubnt-icon--fullscreen'): try: driver.find_element(By.CLASS_NAME, "ubnt-icon--fullscreen").click() sleep(10) print("SUCCESS : 进入全屏实时视图") page_stable_time = time() # 全屏后重置稳定时间 except: print("STATUS : 已处于实时视图") # 仅当页面稳定超过1分钟且存在错误提示时,才执行刷新 if (time() - page_stable_time) >= 60 and driver.find_elements(By.CLASS_NAME, 'has-message'): print("ACTION : 检测到持续错误,刷新页面") driver.refresh() page_stable_time = time() # 刷新后重置稳定时间 sleep(1) # 循环间隔,降低资源占用
修改说明
- 新增
page_stable_time变量,记录每次关键操作完成后的时间点,确保只在页面稳定运行1分钟后检查错误 - 每次成功执行验证绕过、登录、视图切换、全屏操作后,重置稳定时间,避免误判
- 增加循环间隔
sleep(1),减少脚本对系统资源的消耗 - 优化打印信息为中文,提升可读性
内容的提问来源于stack exchange,提问作者Jacob Revet
相关产品推荐
相关产品推荐

