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

如何使用Selenium在多个元素中查找部分文本?

问题

我尝试在网页的<p>元素中查找包含特定字符串的部分文本,我知道如何查找完整文本,但不知道如何查找匹配的部分文本。
例如,若p标签内的文本包含"Lorem ipsum",而我的目标字符串是"ipsum",脚本应能找到该文本。

以下是我目前的代码:

#elem = driver.find_element_by_tag_name('p').text
elem = driver.find_element(By.XPATH, "//p[contains(text(), ' "+string" ')]").get_attribute('text')

if title in elem:
    print(title)

请问我的代码哪里出错了?


错误分析与修正

你的代码存在几个关键问题,逐一说明并修正:

  • XPath变量拼接语法错误:
    原代码里的"//p[contains(text(), ' "+string" ')]"是错误的Python字符串写法,无法将变量string正确插入到XPath表达式中,会直接触发语法异常。需要用f-string或字符串格式化来完成变量拼接。

  • text()的匹配局限性:
    XPath中的text()仅匹配当前节点的直接文本内容,如果<p>标签内部有子元素(比如<span>),子元素的文本不会被纳入匹配范围。改用.可以匹配元素的所有文本内容(包括子元素文本),更贴合你的需求。

  • 文本获取方式错误:
    get_attribute('text')不是Selenium获取元素文本的正确方式,直接使用元素的.text属性即可获取渲染后的可见文本;如果需要包含隐藏文本,可使用get_attribute('textContent')。

  • 变量名不一致:
    代码中用string指代目标字符串,但判断逻辑里用的是title,若两个变量值不统一,会导致判断逻辑失效,需要保持变量名一致。

修正后的代码示例

from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

# 定义目标字符串
target_str = "ipsum"

try:
    # 查找包含目标字符串的p元素
    p_element = driver.find_element(By.XPATH, f"//p[contains(., '{target_str}')]")
    element_text = p_element.text
    
    if target_str in element_text:
        print(target_str)
except NoSuchElementException:
    print("未找到包含目标字符串的p元素")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:07:11