Driver元素定位if-else语句异常求助:Else分支无法执行
问题分析与解决
你的问题核心在于driver.find_element()的执行逻辑:当它定位不到目标元素时,不会返回False,而是直接抛出NoSuchElementException,导致程序中断,根本走不到else分支。
解决方案1:用find_elements()判断元素存在性
find_elements()会返回匹配元素的列表,找不到元素时返回空列表(空列表在Python中被视为False),可以安全用于条件判断:
close_buttons = driver.find_elements(By.XPATH, "//bdi[normalize-space()='Close']") if close_buttons: close_buttons[0].click() else: WebDriverWait(driver, 300).until( EC.element_to_be_clickable((By.XPATH, "//bdi[normalize-space()='OK']"))) driver.find_element(By.XPATH, "//bdi[normalize-space()='OK']").click() print(sh.cell(row=r, column=2).value, r) r = r + 1
解决方案2:通过try-except捕获异常
这是更贴合Selenium异常处理逻辑的方式,直接捕获元素不存在的异常来执行else分支逻辑:
from selenium.common.exceptions import NoSuchElementException try: driver.find_element(By.XPATH, "//bdi[normalize-space()='Close']").click() except NoSuchElementException: WebDriverWait(driver, 300).until( EC.element_to_be_clickable((By.XPATH, "//bdi[normalize-space()='OK']"))) driver.find_element(By.XPATH, "//bdi[normalize-space()='OK']").click() print(sh.cell(row=r, column=2).value, r) r = r + 1
额外优化建议
- 避免重复定位相同元素,可将定位到的元素存为变量,减少DOM查询次数
- 统一用WebDriverWait等待元素,提升脚本稳定性,比如判断Close元素时也加入等待:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC try: close_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//bdi[normalize-space()='Close']"))) close_btn.click() except: ok_btn = WebDriverWait(driver, 300).until( EC.element_to_be_clickable((By.XPATH, "//bdi[normalize-space()='OK']"))) ok_btn.click() print(sh.cell(row=r, column=2).value, r) r = r + 1
内容的提问来源于stack exchange,提问作者arun
相关产品推荐
相关产品推荐

