Selenium Python条件判断逻辑异常问题求助
问题分析与代码修正
原代码核心问题
find_element()的异常触发:driver.find_element()找不到元素时会直接抛出NoSuchElementException,只要mValue、mValue2、pName任一不存在,代码直接跳转到except分支,根本执行不到后续的if判断。- 无效的
if判断:你写的if mValue:完全没用——能走到这行的前提是元素已经找到(否则早抛异常了),这个判断逻辑不成立。 - 逻辑顺序错误:原代码中如果
mValue不存在就直接continue,导致mValue2即使存在也不会被处理,不符合“任一元素存在就打印”的需求。 - 冗余的页面请求:先访问
urls又立刻调用driver.get("https://targetPage.com"),会覆盖之前的页面请求,driver.get(urls)等于无效操作,需确认这是否是你预期的逻辑(如果是要从urls页面跳转到目标页,应该改成点击链接等操作,而非直接重新请求)。
修正后的代码
from selenium.common.exceptions import NoSuchElementException import time from selenium.webdriver.common.by import By for index, urls in enumerate(links): # 若需从urls页面跳转至目标页,请替换为对应操作(如点击链接),而非直接get # 若无需访问urls,可删除以下两行 driver.get(urls) time.sleep(5) driver.get("https://targetPage.com") time.sleep(5) # 用find_elements避免抛出异常,找不到元素返回空列表 m_value_elements = driver.find_elements(By.XPATH, '/html/body/div[1]/div[2]/div[2]/div[18]/div[2]/div/div/table/tbody/tr/td[2]') m_value2_elements = driver.find_elements(By.XPATH, '/html/body/div[1]/div[2]/div[2]/div[17]/div[2]/div/div/table/tbody/tr/td[2]') p_name_elements = driver.find_elements(By.XPATH, '/html/body/aside/div[2]/div/a') found = False # 检查并打印mValue if m_value_elements: m_text = m_value_elements[0].text if p_name_elements: print(f"{m_text} from: {p_name_elements[0].text}") else: print(m_text) found = True time.sleep(5) # 检查并打印mValue2 if m_value2_elements: m2_text = m_value2_elements[0].text if p_name_elements: print(f"{m2_text} from: {p_name_elements[0].text}") else: print(m2_text) found = True time.sleep(5) # 所有元素都不存在时打印提示 if not found: print(f'No value found from: {urls}')
关键修改说明
- 改用
find_elements():复数形式的查找方法在找不到元素时返回空列表,不会抛出异常,确保代码能正常执行后续判断。 - 独立检查每个元素:分别判断
mValue、mValue2是否存在,只要有一个存在就标记found=True,避免原代码中continue导致的漏判。 - 处理
pName不存在的情况:如果pName找不到,至少能打印目标元素的文本,你可根据需求调整这部分逻辑(比如要求pName必须存在,就把pName的判断放在最前面)。 - 移除冗余的
try/except:因为find_elements()已经避免了元素不存在的异常,若需处理页面加载失败等其他异常,可在页面请求部分添加try/except。
内容的提问来源于stack exchange,提问作者jfr01
相关产品推荐
相关产品推荐

