如何使用Selenium获取指定div元素中的文本内容
解决方案
你当前的代码核心问题是缺失定位方式参数,加上绝对XPath稳定性差,很容易定位失败,可按以下步骤修复:
- Selenium 4及以上版本的
find_element方法要求第一个参数指定定位类型,你使用的是XPath路径,需要先导入By类,指定By.XPATH作为第一个参数。 - 绝对XPath依赖完整的页面层级,只要页面结构有一处变动就会失效,更推荐先通过F12调试工具查看目标div是否有唯一的ID、类名、自定义属性,基于这些写相对XPath,稳定性会高很多。
基础修复代码
# 先导入依赖的By类 from selenium.webdriver.common.by import By # 补全定位参数的写法 target_div = driver.find_element( By.XPATH, "/html/body/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div" ) # 提取元素文本直接调用text属性即可 print(target_div.text)
如果页面是异步加载,元素还没渲染完成就执行定位也会失败,可以加显式等待优化:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,直到目标元素加载完成 wait = WebDriverWait(driver, 10) target_div = wait.until( EC.presence_of_element_located(( By.XPATH, "/html/body/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div" )) ) print(target_div.text)
学习建议
- 优先掌握Selenium的8种基础定位方式,日常使用优先选ID、类名、CSS选择器、相对XPath这几种稳定性更高的方案。
- 可以直接在浏览器F12控制台用
$x("你的XPath表达式")测试定位是否准确,不用每次运行Selenium代码调试,效率更高。 - 搞清楚隐式等待、显式等待的区别,爬虫场景下优先用显式等待适配异步加载的页面。
内容的提问来源于stack exchange,提问作者Rajdeep Borgohain
相关产品推荐
相关产品推荐

