Selenium爬取新蛋显卡数据时get_attribute('title')返回空值如何解决
问题原因
- 存在代码笔误:循环遍历逻辑中
for product in product:写法错误,应该遍历之前获取的商品集合products,该错误会直接导致程序运行报错,无法进入内层提取逻辑。 - DOM结构定位不准确:
item-brand类对应的是品牌区域的外层div容器,该元素本身没有配置title属性,你要提取的品牌名称存储在该div内部的img子元素的title属性中,直接获取父元素的title属性自然返回空字符串。 - 可选风险:若你使用的是Selenium4及以上版本,
find_elements_by_class_name属于已废弃的旧API,部分运行环境下会出现定位异常,同时未配置页面加载等待也可能出现元素未渲染完成就提取属性的问题。
解决方法
首先替换为以下修正后的代码:
from selenium import webdriver from selenium.webdriver.common.by import By import time # 路径加r前缀避免转义字符报错 PATH = r"C:\Program Files (x86)\chromedriver.exe" driver = webdriver.Chrome(PATH) # 配置隐性等待,最长等10秒待元素加载完成 driver.implicitly_wait(10) url = 'https://www.newegg.ca/p/pl?d=graphic+card&page=' for i in range(1,2): driver.get(url + str(i)) # 兼容Selenium4的定位写法 products = driver.find_elements(By.CLASS_NAME, "item-container") # 修正遍历变量名 for product in products: # 先定位item-brand下的img标签,再提取title属性 brand_ele = product.find_element(By.CSS_SELECTOR, ".item-brand img") brand = brand_ele.get_attribute("title") print(brand) driver.quit()
修改点说明:
- 修正了循环遍历的变量名错误,确保可以正常遍历所有商品容器
- 调整了品牌元素的定位逻辑,改为定位
item-brand容器下的img标签后再提取title属性 - 增加了隐性等待配置,避免页面未渲染完成就提取元素导致的异常
- 替换为Selenium官方推荐的By定位写法,兼容Selenium3和Selenium4所有版本
- 给本地驱动路径增加了原始字符串前缀r,避免Windows路径中的转义字符引发报错
内容的提问来源于stack exchange,提问作者magicziko
相关产品推荐
相关产品推荐

