Selenium/Python如何判断链接是否禁用并仅在可用时执行点击操作
你遇到的问题根源是Selenium自带的EC.element_to_be_clickable判定逻辑仅识别元素的disabled原生属性,不会识别通过class标记的禁用状态,因此无法适配你当前的按钮实现规则。
你可以先定位到目标按钮后主动检测class属性中是否包含disabled标识,再决定是否执行点击,同时增加重试刷新逻辑即可,参考实现代码如下:
import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC # 统一维护目标元素XPATH,避免重复编写 TARGET_BTN_XPATH = "//span[text()='$30.00']/../following-sibling::div/a[text()='Purchase']" # 最大刷新重试次数,可按需调整 MAX_RETRY_TIMES = 5 retry_cnt = 0 while retry_cnt < MAX_RETRY_TIMES: try: # 先等待元素加载到DOM中 purchase_btn = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, TARGET_BTN_XPATH))) # 检查按钮是否未被禁用 if "disabled" not in purchase_btn.get_attribute("class"): print("按钮可点击,执行点击操作") purchase_btn.click() # 点击成功后终止循环 break # 按钮禁用则刷新重试 print("按钮处于禁用状态,刷新页面后重试") driver.refresh() retry_cnt += 1 except Exception as e: print(f"元素检测异常:{str(e)},刷新页面后重试") driver.refresh() retry_cnt += 1 if retry_cnt == MAX_RETRY_TIMES: print(f"已达到最大重试次数{MAX_RETRY_TIMES},未检测到可点击的购买按钮")
如果你希望和Selenium原生预期条件的使用方式对齐,也可以自定义判断逻辑封装为专用方法:
# 自定义预期条件:元素class不包含disabled def element_is_available(locator): def check(driver): ele = driver.find_element(*locator) return "disabled" not in ele.get_attribute("class") return check # 使用方式 WebDriverWait(driver, 20).until(element_is_available((By.XPATH, TARGET_BTN_XPATH))).click()
内容的提问来源于stack exchange,提问作者user1345331
相关产品推荐
相关产品推荐

