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
相关产品推荐
相关产品推荐

