Selenium Python如何获取元素内不含子标签内容的直接文本
Selenium提取元素直接文本(排除子标签内容)实现方法
Selenium 元素对象的.text属性默认会递归收集当前元素下所有后代节点的文本内容拼接返回,因此会把内部span标签内的₹690一并返回,要仅获取div下不属于子标签的直接文本₹199,可使用以下两种方案:
方案1:执行JavaScript脚本获取DOM直接文本节点(推荐,稳定性最高)
DOM节点的childNodes属性仅返回当前元素的直接子节点,筛选其中节点类型为文本节点(nodeType=3)的内容即可,不受嵌套结构变化影响:from selenium.webdriver.common.by import By # 先定位目标div元素 price_div = driver.find_element( by=By.XPATH, value="//div[@class='ProductVariants__PriceContainer-sc-1unev4j-9 jjiIua']" ) # 传入元素执行JS提取直接文本 direct_price = driver.execute_script(""" let res = ''; for (const node of arguments[0].childNodes) { if (node.nodeType === Node.TEXT_NODE) { res += node.textContent.trim(); } } return res; """, price_div)如果你确认目标文本是div的第一个子节点,还可以简化JS代码:
direct_price = driver.execute_script( "return arguments[0].firstChild.textContent.trim()", price_div )运行后
direct_price的值就是需要的₹199。方案2:文本差集替换(适合结构固定的简单场景)
先获取div的全量文本,再获取内部span的文本,将span文本从全量文本中移除即可,不需要执行JS:price_div = driver.find_element( by=By.XPATH, value="//div[@class='ProductVariants__PriceContainer-sc-1unev4j-9 jjiIua']" ) full_text = price_div.text span_text = price_div.find_element(By.TAG_NAME, "span").text direct_price = full_text.replace(span_text, "").strip()注意:如果直接文本和子标签文本存在重复内容,该方法会出现替换错误,仅建议结构完全固定时使用。
内容的提问来源于stack exchange,提问作者user11004963
相关产品推荐
相关产品推荐

