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

Selenium多元素选择报错:AttributeError问题求助

Selenium提取元素报错排查及修复

问题原因分析

  1. 绝对路径脱离循环上下文:循环内使用的Xpath是绝对路径,会从整个HTML文档根节点开始查找,完全不基于当前dealer元素的子节点,导致查找逻辑错误。
  2. 列表对象直接调用.text:find_elements()返回的是元素列表,列表本身没有.text属性,必须先获取列表中的单个元素再调用该属性。
  3. 初始容器定位错误:你用来获取dealers的Xpath仅匹配到一个父容器,没有定位到每个经销商的独立节点,循环遍历失去意义。

修复后的代码

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

url = 'https://automira.ro/dealeri-autorizati/lista'

PATH = 'C:\\Users\\czoca\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Python 3.6\\chromedriver.exe'

driver = webdriver.Chrome(PATH)
driver.get(url)

driver.maximize_window()
driver.implicitly_wait(10)  # 调整为合理等待时长,避免过度等待

# 定位每个经销商的独立容器,匹配所有经销商节点
dealers = driver.find_elements(By.XPATH, '//div[contains(@class, "dealer-item")]')

for dealer in dealers:
    # 基于当前dealer元素用相对路径查找子节点
    name = dealer.find_element(By.XPATH, './/h4/a').text
    # 部分经销商可能缺失邮箱/电话,添加异常处理避免程序崩溃
    try:
        email = dealer.find_element(By.XPATH, './/div[contains(@class, "dealer-email")]/a').text
    except:
        email = "无邮箱"
    try:
        phone = dealer.find_element(By.XPATH, './/div[contains(@class, "dealer-phone")]/a').text
    except:
        phone = "无电话"
    print(f"经销商名称: {name}, 邮箱: {email}, 电话: {phone}")

driver.quit()

关键修复点说明

  • 容器定位修正:改用//div[contains(@class, "dealer-item")]定位每个独立经销商容器,确保循环能遍历所有目标节点。
  • 相对路径使用:循环内的Xpath以.//开头,表示从当前dealer元素的子节点开始查找,保证上下文匹配正确。
  • 单个元素获取:使用find_element()获取单个目标元素,直接调用.text;同时增加异常处理,兼容部分经销商信息缺失的情况。
  • 等待时长优化:将隐式等待从100秒调整为10秒,符合实际页面加载需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:10:51