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

Selenium WebDriver中.text无法获取元素内容问题求助

解决Selenium无法获取元素.text内容的问题

看了你的代码,我发现几个可能导致拿不到元素文本的问题,咱们一步步来排查和修复:

1. 修复WebDriverWait的回调参数问题

你在WebDriverWait的until方法里直接用了全局的driver,但lambda表达式已经传入了browse参数(这其实就是等待后的driver实例),应该用这个参数来调用查找方法,不然等待逻辑可能没真正生效,导致元素还没完全加载就去获取文本。

2. 替换过时的元素定位方法

find_elements_by_css_selector是Selenium旧版本的写法,现在已经被标记为过时了,建议使用find_elements(By.CSS_SELECTOR, 选择器)的标准写法,需要先导入By类。

3. 尝试用get_attribute("textContent")替代.text

有时候元素的文本内容虽然存在,但因为样式嵌套、隐藏文本等原因,.text方法无法正确获取,这时候可以试试获取textContent属性——它会返回元素包含的所有文本内容,包括那些被CSS隐藏的部分。

4. 强化等待条件,确保元素完全渲染

虽然你用脚本把.item-content设为display:block,但里面的<p>元素可能还没完全渲染完成。可以用visibility_of_all_elements_located作为等待条件,确保所有目标元素都可见后再进行操作。

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get('http://www.akademia-playdoh.pl/akademiawyobrazni,konkurs,31.html')

# 先确保.item-content元素存在,再修改样式
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".item-content")))
driver.execute_script("$('.item-content').css('display', 'block');")

# 等待所有目标<p>元素可见,用更可靠的等待条件
list_items = WebDriverWait(driver, 10).until(
    EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".item-content p"))
)

print('Zebrane dane')
id = 1
for item in list_items:
    # 优先用.text,为空时 fallback 到textContent
    text = item.text.strip() if item.text.strip() else item.get_attribute("textContent").strip()
    print(f"ID: {id} {text}")
    id += 1

driver.close()

额外说明

  • 导入了expected_conditions和By类,让等待逻辑更严谨,避免过早操作未加载完成的元素。
  • 用f-string格式化输出,比传统字符串拼接更简洁易读。
  • 增加了文本非空判断,确保能拿到有效的内容。

你可以试试这段代码,应该能正常获取到目标元素的文本内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:46