我可以在使用同一个语句的同级之前或之后获取值吗?

时间:2018-08-13 09:15:51

标签: python selenium-webdriver xpath

想在使用同一个语句的同级之前或之后获取值吗?

HTML代码

<tr><td width="295" align="right" class="bg1"><div class="barBg2"><div class="info" style="width:60%;"></div></div></td><td width="50" align="center" class="bg1">60%</td><td width="110" align="center" class="bg3">半場控球率</td><td width="50" align="center" class="bg1">40%</td><td width="295" align="left" class="bg1"><div class="barBg"><div class="info" style="width:40%;"></div></div></td><iframe id="tmp_downloadhelper_iframe" style="display: none;"></iframe></tr>

HTML显示输出

60%半场控球率40%

Python代码

#coding:utf-8
from selenium import webdriver

driver=webdriver.Firefox()
driver.get('url')

texts = driver.find_elements_by_xpath('//*[@id="matchData"]/div[5]//tr//td[preceding-sibling::td="半場控球率" and following-sibling::td="半場控球率"]')

print texts
driver.close()

预期产量

60% 40%

1 个答案:

答案 0 :(得分:1)

[preceding-sibling::td="半場控球率" and following-sibling::td="半場控球率"] 

predicate表示您要选择元素为 BOHM且在“半场控球率”文本内容同级之后的元素。如果要选择元素为“ em>”或“ em>”的同级元素之前或之后的元素,则需要

[preceding-sibling::td="半場控球率" or following-sibling::td="半場控球率"]

还要注意,在您的情况下,texts是WebElement的列表。如果要获取文本节点,可以尝试

texts = [td.text for td in driver.find_elements_by_xpath('//td[(preceding-sibling::td="半場控球率" or following-sibling::td="半場控球率") and not(div)]')]