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

使用Selenium运行Python代码出现NoSuchElementException异常求助

解决Selenium NoSuchElementException异常的方案

核心原因分析

你的代码在朋友设备正常但本地报错,排除版本问题后,大概率是页面加载时序差异、元素定位器稳定性不足或本地浏览器环境差异导致的。以下是针对性解决步骤:

1. 增加显式等待(最常见修复手段)

直接调用find_element会在页面未完全加载时执行,导致找不到元素。改用Selenium显式等待,等待目标元素出现后再操作:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

urls = [
    'https://wuzzuf.net/jobs/p/FeluBSsQtYBB-Quality-Control-Inspector-Breadfast-Cairo-Egypt' 
]
PATH = Service("C:\Program Files (x86)\chromedriver.exe")

for url in urls:
    driver = webdriver.Chrome(service=PATH)
    driver.get(url)
    # 等待元素出现,最长等待10秒
    pre_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="app"]/div/main/section[2]/div[4]/span[2]'))
    )
    print(pre_element.text)
    driver.quit()  # 关闭浏览器避免资源占用

2. 优化元素定位器(提高稳定性)

你当前使用的XPath依赖页面层级结构,一旦页面布局微调就会失效。建议更换为更稳定的定位方式,比如基于元素属性:

# 示例:用CSS选择器定位(需根据实际元素class调整)
pre_element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, 'span[class*="job-type"]'))
)

# 或用更简洁的XPath
pre_element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//span[contains(@class, "job-type")]'))
)

3. 处理本地浏览器环境差异

  • 开启无痕模式:避免缓存的旧页面布局影响:
options = webdriver.ChromeOptions()
options.add_argument("--incognito")
driver = webdriver.Chrome(service=PATH, options=options)
  • 自动关闭弹窗:如果页面有Cookie提示等弹窗,先处理再查找元素:
try:
    cookie_button = WebDriverWait(driver, 5).until(
        EC.element_to_be_clickable((By.ID, 'cookie-consent-button'))
    )
    cookie_button.click()
except:
    pass  # 无弹窗则跳过
  • 统一地区设置:如果浏览器地区与朋友不同,手动设置地区:
options.add_argument("--lang=en-US")

4. 验证元素是否在iframe中

若目标元素嵌套在iframe内,需先切换到iframe再操作:

# 根据iframe的ID或索引切换
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID, 'iframe-id')))
# 查找元素...
driver.switch_to.default_content()  # 操作完成后切回主文档

内容的提问来源于stack exchange,提问作者Omar Mokhtar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:34:53