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

Python Selenium爬虫程序报NoSuchElementException的解决方法

解决Selenium中NoSuchElementException(找不到infobtn元素)的问题

问题描述

我正在开发一个基于Python Selenium的爬虫程序,用于查看我的学院作业,但运行程序时出现错误。

我的代码

from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
browser = webdriver.Chrome(options=options)

delte = browser.find_element(By.XPATH, "/html/body/div[1]/img[2]").click()

btn = browser.find_element(By.XPATH, '//*[@id="logbtn"]').click()

loginid = browser.find_element(By.XPATH, '//*[@id="webId"]').send_keys("I will not write my id and pw for safety")
loginpw = browser.find_element(By.XPATH, '//*[@id="webPass"]').send_keys("")

loginbtn = browser.find_element(By.XPATH, '//*[@id="frm"]/div/div/div[1]/a').click()

op = browser.find_element(By.XPATH, '//*[@id="infobtn"]').click()

hw = browser.find_element(By.XPATH, '//*[@id="rightbox"]/div[2]/div[2]/div/ul/li[4]/a').click()

遇到的错误

File "C:\Users\MyName\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\remote\errorhandler.py", line 243, in check_response        
    raise exception_class(message, screen, stacktrace)      
selenium.common.exceptions.NoSuchElementException: Message: 
no such element: Unable 
to locate element: {"method":"xpath","selector":"//*[@id="infobtn"]"}   
  (Session info: chrome=108.0.5359.72)
Stacktrace: 
Backtrace:  
        Ordinal0 [0x00E5ACD3+2075859]
        Ordinal0 [0x00DEEE61+1633889]
        Ordinal0 [0x00CEB7BD+571325]        Ordinal0 [0x00D1AC2F+764975]        Ordinal0 [0x00D1AE1B+765467]        Ordinal0 [0x00D4D0F2+970994]        Ordinal0 [0x00D37364+881508]        Ordinal0 [0x00D4B56A+963946]        Ordinal0 [0x00D37136+880950]        Ordinal0 [0x00D0FEFD+720637]        Ordinal0 [0x00D10F3F+724799]        GetHandleVerifier [0x0110EED2+2769538]  
        GetHandleVerifier [0x01100D95+2711877]  
        GetHandleVerifier [0x00EEA03A+521194]   
        GetHandleVerifier [0x00EE8DA0+516432]   
        Ordinal0 [0x00DF682C+1665068]
        Ordinal0 [0x00DFB128+1683752]
        Ordinal0 [0x00DFB215+1683989]
        Ordinal0 [0x00E06484+1729668]
        BaseThreadInitThunk [0x76E5FEF9+25]     
        RtlGetAppContainerNamedObjectPath [0x77477BBE+286]  
        RtlGetAppContainerNamedObjectPath [0x77477B8E+238]

解决方案

  • 添加显式等待,确保元素加载完成:
    Selenium执行速度远快于页面渲染,直接查找元素时可能元素还未生成。使用显式等待可以解决这个问题:
    先导入必要模块:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    

    然后替换查找infobtn的代码:

    op = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="infobtn"]'))
    ).click()
    

    这里的10是最大等待秒数,可根据页面实际加载速度调整。

  • 检查元素是否在iframe内:
    如果infobtn嵌套在iframe中,必须先切换到对应的iframe才能定位元素:

    # 替换为实际的iframe定位方式(比如id、name或XPATH)
    iframe = browser.find_element(By.XPATH, '//iframe[@id="your-iframe-id"]')
    browser.switch_to.frame(iframe)
    # 现在可以查找并点击infobtn
    op = browser.find_element(By.XPATH, '//*[@id="infobtn"]').click()
    # 操作完成后切回主文档,避免后续元素查找出错
    browser.switch_to.default_content()
    
  • 验证元素定位表达式的正确性:
    右键页面选择「检查」,找到infobtn元素,复制官方提供的XPATH或直接用ID定位(更可靠):

    op = browser.find_element(By.ID, 'infobtn').click()
    

    部分页面会动态生成元素属性,导致之前复制的XPATH失效,需要重新获取。

  • 等待页面跳转完成:
    点击登录按钮后,页面可能需要跳转,这时候需要等待新页面加载完成再查找元素:

    # 替换为登录后跳转页面的URL关键词
    WebDriverWait(browser, 10).until(EC.url_contains("dashboard"))
    

内容的提问来源于stack exchange,提问作者Yunwoo Chang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:10:29