Python/Selenium/Parsel:如何提取DIV内包含所有子元素的文本?
解决方案
直接定位目标DIV元素后,利用Selenium元素的text属性或JavaScript的textContent即可提取所有子元素(包括span)的文本内容,按原始顺序保留。
核心实现步骤
- 定位到目标DIV元素(使用你已有的类选择器XPath)
- 提取元素的完整文本内容,无需单独遍历span标签
代码示例
from selenium import webdriver from selenium.webdriver.common.by import By import re # 初始化ChromeDriver driver = webdriver.Chrome() # 定位目标DIV(替换成你的类选择器XPath) target_div = driver.find_element(By.XPATH, "//div[@class='your-target-class']") # 方式1:用Selenium自带的text属性(渲染后文本,自动合并多余空格) full_text = target_div.text # 方式2:用JavaScript获取textContent(保留更原始的文本结构,包括换行) # full_text = driver.execute_script("return arguments[0].textContent;", target_div) # 处理空DIV的情况(你已实现,这里做示例判断) if full_text.strip(): # 后续用正则处理,比如提取TAC/THC的百分比 tac_match = re.search(r'TAC:\s*(\d+\.\d+%)', full_text) thc_match = re.search(r'THC:\s*(\d+\.\d+%)', full_text) if tac_match: print(f"TAC值: {tac_match.group(1)}") if thc_match: print(f"THC值: {thc_match.group(1)}") else: print("DIV内容为空") # 关闭驱动 driver.quit()
为什么之前的XPath只提取了数字?
你之前的XPath应该是指定了仅获取特定span(比如带百分比的span)的文本,而没有覆盖整个DIV下的所有子元素文本。直接取DIV元素的text属性会自动拼接所有子节点的文本内容,完全符合按顺序保留的需求。
内容的提问来源于stack exchange,提问作者T0ne
相关产品推荐
相关产品推荐

