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

使用Python Selenium提取同类名网页元素信息的问题求助

问题修正方案

原代码核心错误点

  • 路径范围错误:XPath以//开头时会全局匹配整个文档的元素,而非限定在当前遍历的li节点下,导致每次循环都重复获取全页面所有符合条件的元素,最终输出内容全部重复。需改用.//开头的相对路径,限定查找范围为当前li内部。
  • 逻辑适配错误:每个li节点仅对应一组「属性名+属性值」,而非每个li都包含4个目标字段的内容,无需嵌套循环遍历span,只需逐行判断属性名,将对应属性值存入对应列表即可。
  • 方法调用错误:find_elements返回的是元素列表,无法直接调用.text属性,需改用单数形式find_element获取单个元素后再提取文本。

修正后可运行代码

from selenium import webdriver
import pandas as pd
from selenium.webdriver.common.by import By

# 启动Chrome浏览器(Selenium3可保留原有路径写法,Selenium4建议用Service封装路径)
browser = webdriver.Chrome(r'C:\Users\KristerJens\Downloads\chromedriver_win32\chromedriver')
# 添加隐式等待,避免元素未加载完成导致的报错
browser.implicitly_wait(10)

# 访问目标页面
browser.get("https://www.xl-byg.dk/shop/knauf-insulation-ecobatt-murfilt-190-mm-2255993")

# 初始化四个字段的存储列表
brand = []
product = []
series = []
model = []

# 遍历ul下的所有li属性行
for li in browser.find_elements(By.XPATH, "//ul[@class='short ng-star-inserted']/li"):
    # 提取当前li内的属性名和属性值,限定在li内部查找
    attr_name = li.find_element(By.XPATH, ".//span[@class='attribute-name']").text.strip()
    attr_value = li.find_element(By.XPATH, ".//span[@class='attribute-value']").text.strip()
    # 根据属性名匹配对应列表存入值
    if attr_name == 'Mærke':
        brand.append(attr_value)
    elif attr_name == 'Produkttype':
        product.append(attr_value)
    elif attr_name == 'Serie':
        series.append(attr_value)
    elif attr_name == 'Model':
        model.append(attr_value)

# 生成目标DataFrame
df = pd.DataFrame({
    'Mærke': brand,
    'Produkttype': product,
    'Serie': series,
    'Model': model
})

print(df)
# 操作完成后关闭浏览器释放资源
browser.quit()

如果你使用的是Selenium3.x版本,将代码中find_elements(By.XPATH, xxx)替换为find_elements_by_xpath(xxx)、find_element(By.XPATH, xxx)替换为find_element_by_xpath(xxx)即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:54:04