You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Python条件判断逻辑异常问题求助

问题分析与代码修正

原代码核心问题

  1. find_element()的异常触发:driver.find_element()找不到元素时会直接抛出NoSuchElementException,只要mValue、mValue2、pName任一不存在,代码直接跳转到except分支,根本执行不到后续的if判断。
  2. 无效的if判断:你写的if mValue:完全没用——能走到这行的前提是元素已经找到(否则早抛异常了),这个判断逻辑不成立。
  3. 逻辑顺序错误:原代码中如果mValue不存在就直接continue,导致mValue2即使存在也不会被处理,不符合“任一元素存在就打印”的需求。
  4. 冗余的页面请求:先访问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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:10:23