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

如何绕过Selenium爬虫的「无法定位元素」NoSuchElementException异常?

解决方法

你遇到的NoSuchElementException是Selenium找不到目标元素时的默认抛出异常,要让程序不中断,需要捕获该异常并做兼容处理,同时建议增加元素等待逻辑避免页面未加载完成导致的误判。

具体修改点

  • 提前导入NoSuchElementException异常类,以及显式等待相关工具类
  • 用try...except代码块包裹元素查找逻辑,元素不存在时给价格设置默认值(如N/A)
  • 增加显式等待逻辑,优先等待元素加载完成,提高抓取成功率
  • 所有导入语句统一放在代码顶部,符合Python编码规范

修改后完整代码

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import numpy as np
import pandas as pd

browser = webdriver.Chrome()
# 最长等待10秒,轮询检查元素是否存在
wait = WebDriverWait(browser, 10)

# Product1
browser.get('https://www.amazon.com.tr/Behringer-High-Precision-Crossover-Limiters-Adjustable/dp/B07GSGYRK1/ref=sr_1_1?dchild=1&keywords=behringer+cx3400+v2&qid=1630311885&sr=8-1')

price_text = "N/A"
try:
    # 先等待元素加载完成,再取元素
    price_ele = wait.until(EC.presence_of_element_located((By.ID, 'priceblock_ourprice')))
    price_text = price_ele.text
except NoSuchElementException:
    # 捕获元素不存在的异常,保持price_text为默认值即可
    pass

df = pd.DataFrame([["info", "info", price_text]], columns=["Product", "Firm", "Price"])
df.to_csv('info.csv', encoding="utf-8", index=False, header=False)
df_final = pd.read_csv('info.csv')
df_final.head()

browser.quit()

逻辑说明

  • 如果元素正常加载完成,就取元素的text作为价格值
  • 如果等待超时后仍找不到元素,就会捕获到NoSuchElementException,价格用预设的N/A填充,程序会继续执行后面的CSV写入等逻辑,不会中断
  • 如果后续要爬取多个商品,只需要把商品访问、价格抓取的逻辑放到循环里即可,单个商品抓不到价格不会影响整个循环运行

内容的提问来源于stack exchange,提问作者Alex Kurkcu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:30:00