如何使用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
相关产品推荐
相关产品推荐

