如何通过Selenium和Python从HTML DOM分别获取td内的独立文本?
如何在Selenium中直接获取td内的独立文本片段
嘿,我明白你的困扰!当你调用elem.find_element_by_xpath('./td[5]').text时,Selenium会把该td元素下所有可见文本合并成一个字符串,自然就把text1和text2揉在一起了。不过完全不用靠拆分来解决,直接定位具体的文本节点就能分别拿到它们,下面给你两种实用方法:
方法1:精准定位文本节点
利用XPath的text()选择器,直接抓取td下的两个独立文本片段:
# 获取第一个文本(text1) text1 = elem.find_element_by_xpath('./td[5]/text()[1]').get_attribute('nodeValue').strip() # 获取第二个文本(text2) text2 = elem.find_element_by_xpath('./td[5]/text()[2]').get_attribute('nodeValue').strip()
这里要注意几个细节:
text()[1]对应td里的第一个文本节点(就是你要的text1),text()[2]对应第二个(text2)- 不能直接用
.text属性,因为文本节点不是常规的WebElement,得用get_attribute('nodeValue')来提取内容 - 加上
.strip()是为了清除文本前后可能存在的换行、空格等冗余字符
方法2:通过
标签间接定位
如果文本节点的位置不太固定,但<br>标签的位置是确定的,也可以用它来辅助定位:
# 取第一个<br>前面的文本(text1) text1 = elem.find_element_by_xpath('./td[5]/br[1]/preceding-sibling::text()[1]').get_attribute('nodeValue').strip() # 取第二个<br>后面的文本(text2) text2 = elem.find_element_by_xpath('./td[5]/br[2]/following-sibling::text()[1]').get_attribute('nodeValue').strip()
这种方法适应性更强,哪怕td里多了一些其他元素,只要<br>的位置不变,就能准确拿到目标文本。
本质上,这两种方法都是绕过了直接获取整个td的文本,而是精准定位到你需要的单个文本节点,这样就能把text1和text2分别存入独立变量啦!
内容的提问来源于stack exchange,提问作者cybera
相关产品推荐
相关产品推荐

