如何在Python Selenium中提取标签外的独立文本?
解决提取div内label外文本的问题
方法1:通过XPath直接定位目标文本节点
修改XPath,直接选择div下的非空白文本节点,跳过label元素的内容:
# 注意:Selenium中使用text()定位文本节点时,find_element会返回字符串 amount = driver.find_element_by_xpath("//body[1]/div[4]/div[1]/div[2]/div[2]/div[3]/div[1]/div[1]/div[1]/font[1]/div[1]/table[2]/tbody[1]/tr[1]/td[1]/div[10]/text()[normalize-space()]") print(amount.strip())
text()[normalize-space()]会筛选出div下非空白的独立文本节点,也就是你要的$0.00。
方法2:提取完整文本后过滤label内容
先分别获取label和div的文本,再通过字符串替换去掉label内容:
# 获取label的文本内容 label_content = driver.find_element_by_xpath("//body[1]/div[4]/div[1]/div[2]/div[2]/div[3]/div[1]/div[1]/div[1]/font[1]/div[1]/table[2]/tbody[1]/tr[1]/td[1]/div[10]/label").text # 获取div的完整文本 full_div_text = driver.find_element_by_xpath("//body[1]/div[4]/div[1]/div[2]/div[2]/div[3]/div[1]/div[1]/div[1]/font[1]/div[1]/table[2]/tbody[1]/tr[1]/td[1]/div[10]").text # 过滤得到目标金额 target_amount = full_div_text.replace(label_content, "").strip() print(target_amount)
方法3:修正following-sibling的写法
你之前用following-sibling失败,是因为没定位到文本节点。正确写法是定位label后,选择其后面的文本节点:
amount = driver.find_element_by_xpath("//body[1]/div[4]/div[1]/div[2]/div[2]/div[3]/div[1]/div[1]/div[1]/font[1]/div[1]/table[2]/tbody[1]/tr[1]/td[1]/div[10]/label/following-sibling::text()[normalize-space()]") print(amount.strip())
版本兼容提示
如果使用Selenium 4.x,find_element_by_xpath已被弃用,建议改用:
from selenium.webdriver.common.by import By amount = driver.find_element(By.XPATH, "你的XPath表达式")
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

