Python Selenium无法获取SVG内WebElement文本问题求助
问题修复方案
报错原因说明
AttributeError: 'list' object has no attribute 'text'报错是因为你使用了find_elements_by_xpath(复数形式),该接口返回的是符合匹配规则的元素列表,列表本身没有text属性,需要取列表内的单个元素操作,或者遍历列表处理。如果确认只有一个匹配结果,直接用单数形式的find_element_by_xpath即可。- 遍历SVG的text节点打印内容为空,是因为Selenium的
.text属性对SVG命名空间下的元素兼容性较差,无法正常读取文本内容,需要通过获取元素的textContent属性拿到对应文本。另外要注意确认元素加载完成后再操作,避免定位到空元素。
修复后代码示例
# 导入显式等待依赖(如果用旧版selenium可以跳过,建议加上避免元素未加载的问题) from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 普通HTML元素文本读取正常,保持原有逻辑即可 time_expented = driver.find_element(By.CSS_SELECTOR, "h1") winning_rate = driver.find_element(By.CSS_SELECTOR, "h2") print(time_expented.text) print(winning_rate.text) # 显式等待SVG元素加载,最长等待10秒 wait = WebDriverWait(driver, 10) put_action = wait.until(EC.presence_of_all_elements_located((By.XPATH, '//*[@id="chart"]/svg/g/g[7]/text[1]'))) # 遍历读取textContent属性获取SVG文本 for tx in put_action: print(tx.get_attribute('textContent')) # 若确认只有一个匹配元素,可直接用单数定位方式 # put_action = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="chart"]/svg/g/g[7]/text[1]'))) # print(put_action.get_attribute('textContent'))
排查补充
如果运行后还是没有输出,先打印len(put_action)查看匹配到的元素数量,如果为0说明XPath定位规则有误,需要调整定位路径。
内容的提问来源于stack exchange,提问作者teguh abds
相关产品推荐
相关产品推荐

