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

Python Selenium 从WebElement列表按class定位子元素报错问题咨询

问题根因
  • 你使用的find_element_by_class_name属于Selenium 3的废弃API,在Selenium 4版本中父元素上下文调用该API时,会出现相对路径解析异常,没有在当前title元素的子节点范围内查找,导致定位失败。
  • 现有代码还存在类型错误:print("Also: " + heading2)直接拼接WebElement对象和字符串,会抛出类型错误,需要取元素的.text属性输出。
解决方案

方案1:改用Selenium 4标准定位写法(最推荐)

替换所有旧的find_element_by_*API为官方推荐的find_element(By.定位类型, 定位值)写法,修复后完整代码如下:

from typing import List, Text
from selenium import webdriver
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = 'C:\\Users\\ed821\\Downloads\\TEST2.html'
driver.get(url)

titles = driver.find_elements(By.CLASS_NAME, "pp")

for title in titles:
    heading = title.find_element(By.TAG_NAME, "h1")
    heading2 = title.find_element(By.CLASS_NAME, "a1")
    print("Title is:" + heading.text)
    print("Also: " + heading2.text)

方案2:CSS选择器相对定位(兼容性最强)

如果方案1仍有异常,可以直接使用CSS选择器明确限定在当前父元素下查找:

# 写法1:查找当前元素下所有class为a1的子节点
heading2 = title.find_element(By.CSS_SELECTOR, ".a1")
# 写法2:仅查找当前元素的直接子节点中class为a1的元素,匹配度更高
heading2 = title.find_element(By.CSS_SELECTOR, "> .a1")

Selenium 3临时兼容方案

如果你仍在使用Selenium 3版本,可以改用相对Xpath定位,注意开头的.不能省略,代表从当前元素上下文开始查找:

heading2 = title.find_element_by_xpath(".//*[@class='a1']")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:27:03