Selenium Python:定位含特定文本的li元素及提取目标内容
问题解决方法
1. 修正li节点的定位XPath
你原代码的XPath匹配失败,核心原因是li的直接文本包含引号和前后空格,而你写的匹配字符串缺少引号,导致无法命中目标节点。可以用两种方式修正:
- 方式一:完整匹配文本中的引号与空格
el = driver.find_element(By.XPATH, "//li[contains(text(),'\" text with trailing spaces \"')]")
- 方式二:用
normalize-space处理文本,自动去除前后空格,简化匹配逻辑(注意保留文本内的引号)
el = driver.find_element(By.XPATH, "//li[normalize-space(text())='\"text with trailing spaces\"']")
如果li节点的文本存在换行或冗余空格,也可以基于节点整体文本的归一化结果匹配:
el = driver.find_element(By.XPATH, "//li[normalize-space(.)='\" text with trailing spaces \" Text to be captured Another text']")
不过这种方式依赖子节点文本内容,精准度不如前两种。
2. 提取目标内容
定位到li节点后,可按以下方式提取所需信息:
提取urlToBeCaptured
通过li节点找到子a标签,再获取其href属性:
url = el.find_element(By.TAG_NAME, 'a').get_attribute('href')
提取Text to be captured
你提到的代码是可行的,直接通过类名定位span节点并获取文本:
textToBeCaptured = el.find_element(By.CLASS_NAME, 'class1').text
如果遇到文本无法通过.text获取的情况(比如元素隐藏),可以改用以下方式:
textToBeCaptured = el.find_element(By.CLASS_NAME, 'class1').get_attribute('textContent').strip()
内容的提问来源于stack exchange,提问作者bekon
相关产品推荐
相关产品推荐

