如何用Python Selenium提取指定HTML中的'BURGUNDY'文本并解决报错?
解决Selenium提取"BURGUNDY"的报错问题
嘿,我来帮你搞定这两个Selenium报错,顺利提取到"BURGUNDY"文本~
先说说你遇到的两个错误原因
1. AttributeError: 'list' object has no attribute 'get_attribute'
你大概率是用了find_elements()(注意末尾的s,复数形式),这个方法返回的是元素列表,而get_attribute()是单个WebElement对象的方法,列表当然没有这个属性啦!
- 如果目标是单个元素,换成
find_element()(单数)就行; - 如果要处理多个元素,得遍历列表,逐个调用方法。
2. TypeError: 'str' object is not callable
这个是语法写错了:By.XPATH是一个字符串常量,不是函数,不能加括号调用。正确的写法是把定位方式和表达式用逗号分隔,比如find_element(By.XPATH, "你的xpath路径"),而不是By.XPATH("//xxx")。
正确提取"BURGUNDY"的几种方法
根据你提供的HTML结构,这里给你几个可行的实现方案:
方法1:直接用XPATH定位目标div
利用父span的class,定位到包含BURGUNDY的div:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() # 先打开你的目标页面,比如 driver.get("你的页面URL") # 定位到包含BURGUNDY的div target_element = driver.find_element( By.XPATH, "//span[@class='style_title_section__title__1z8gk']/div[contains(text(), 'BURGUNDY')]" ) # 提取文本(strip()去掉多余空格) burgundy_text = target_element.text.strip() print(burgundy_text) # 输出 BURGUNDY
方法2:用CSS选择器定位父元素后取子元素
通过父span的class找到它,再取第一个row类的div:
# 定位父span元素 parent_span = driver.find_element( By.CSS_SELECTOR, "span.style_title_section__title__1z8gk" ) # 找到第一个row div first_row_div = parent_span.find_element(By.CSS_SELECTOR, "div.row:first-of-type") burgundy_text = first_row_div.text.strip() print(burgundy_text)
方法3:处理动态加载的情况(加显式等待)
如果页面是动态加载的,直接定位可能找不到元素,这时候用显式等待确保元素可见:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待10秒,直到目标元素可见 target_element = WebDriverWait(driver, 10).until( EC.visibility_of_element_located( (By.XPATH, "//span[@class='style_title_section__title__1z8gk']/div[1]") ) ) burgundy_text = target_element.text.strip() print(burgundy_text)
内容的提问来源于stack exchange,提问作者Fity
相关产品推荐
相关产品推荐

