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

如何用Python Selenium按文本定位元素并提取其下一个兄弟元素内容?

问题与解决方案

问题描述

我正在学习Python Selenium,卡了好几天,想从给定的HTML里提取注册日期。我试着用这段代码定位包含“registration date”的元素:

driver.find_element(By.XPATH, "text()contains 'registration date' blah")

然后获取它紧邻的下一个元素,但每次返回的都是:

element="37253116-f015-40a1-bdb1-135342333393"

完全搞不懂这是什么,也不知道怎么处理。另外Pandas识别不了这段HTML为表格,而且我不想用Beautiful Soup循环实现,求解决办法。目标HTML代码如下:

<dl class="space">
    <dt>MASTER NAME</dt>
    <dd>Napoleon</dd>
    <dt>BUSINESS TYPE</dt>
    <dd>Oxygen farm</dd>
    <dt>FILE NUMBER</dt>
    <dd>94785394</dd>
    <dt>STATUS</dt>
    <dd>Active</dd>
    <dt>PURPOSE</dt>
    <dd> relaxation </dd>
    <dt>PLACE INCORPORATED</dt>
    <dd> the moon </dd>
    <dt>REGISTRATION DATE</dt>
    <dd>Dec 8, 1986</dd>
    <dt>MAILING ADDRESS</dt>
    <dd> fun land <br>
    THE MOON 
</dd>
</dl>

解决方案

核心问题:你的XPath语法错误

原来的XPath写法不符合规范,导致定位到了错误元素,才返回了那个奇怪的ID值。下面是两种正确的实现方式:

方法1:直接定位目标日期元素

利用<dt>的文本精准匹配,直接获取其相邻的<dd>元素文本:

from selenium.webdriver.common.by import By

# 直接定位REGISTRATION DATE对应的dd元素
registration_date = driver.find_element(By.XPATH, "//dt[text()='REGISTRATION DATE']/following-sibling::dd[1]").text
print(registration_date)  # 输出结果:Dec 8, 1986

这里following-sibling::dd[1]表示取当前<dt>的第一个后续兄弟<dd>节点,直接提取文本就能拿到注册日期。

方法2:容错性更强的文本匹配

如果页面文本可能存在大小写差异,可以用contains配合大小写转换来定位:

# 忽略大小写匹配文本
dt_element = driver.find_element(By.XPATH, "//dt[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'registration date')]")
# 获取相邻的dd元素文本
registration_date = dt_element.find_element(By.XPATH, "./following-sibling::dd[1]").text
print(registration_date)

关于那个奇怪的ID值说明

你之前拿到的element="37253116-f015-40a1-bdb1-135342333393"是某个元素的属性值(比如自定义ID或标识),因为XPath语法错误,Selenium定位到了无关元素,才返回了这个内容。修正XPath后就能正常获取目标日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:20:12