Python Selenium入门:点击按钮后元素不显示如何自动刷新重试?
Selenium 循环重试加载目标元素实现方案
核心逻辑
- 使用显式等待检测目标元素可见状态,避免直接查找元素触发异常导致程序中断
- 用循环包裹「点击按钮→检测元素」的全流程,元素未出现则自动刷新页面重试
- 目标元素成功可见后跳出循环,执行后续点击操作
完整实现代码
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.common.exceptions import TimeoutException driver = webdriver.Firefox() url = "https://www.compumsa.eu/item/GV-R55XTOC-4GD-Gigabyte-Radeon-RX-5500-XT-4GB-OC-PCIE-9320" driver.get(url) driver.maximize_window() # 两个元素的定位表达式提前定义 add_item_btn_xpath = '//*[@id="ContentPlaceHolderMain_LBAddItem"]' caddy_span_xpath = '//*[@id="SpanCaddy"]' # 显式等待最长时间,单位秒,可根据实际网络情况调整 wait_timeout = 10 while True: try: # 等待加购按钮可点击后执行点击 add_btn = WebDriverWait(driver, wait_timeout).until( EC.element_to_be_clickable((By.XPATH, add_item_btn_xpath)) ) add_btn.click() # 等待购物车元素可见 itempanier = WebDriverWait(driver, wait_timeout).until( EC.visibility_of_element_located((By.XPATH, caddy_span_xpath)) ) # 走到这里说明元素已经成功显示,跳出循环 break except TimeoutException: # 任意一步超时(按钮没加载/购物车元素没显示),就刷新页面重试 driver.refresh() # 循环跳出后即可执行对购物车元素的点击操作 itempanier.click() # 后续其他逻辑
关键说明
- 代码兼容最新版Selenium的元素定位语法,替换了已弃用的
find_element_by_xpath写法 - 超时时间可根据你的网络环境自行调整,页面加载慢可以适当调大数值
- 所有异常场景都会自动触发重试,无需人工干预
内容的提问来源于stack exchange,提问作者Benjiski
相关产品推荐
相关产品推荐

