Py学习  »  Python

如何通过匹配第一个元素中的文本来获取第二个元素。在Selenium中,Python

js1069 • 3 年前 • 1586 次点击  

HTML代码片段供参考:

<tr>
</tr>
<tr>
    <td class="gridTD">TITLE</td>
    <td class="gridTD">NAME</td>
</tr>
<tr>
</tr>

有一系列 tr 元素的位置发生变化,所以我必须从 td 子元素。 我正试着抓住 第二 td 通过匹配 第一 td 元素,但我不知道如何访问它。

我刚接触Selenium,刚刚开始使用XPath定位元素。

这些元素可以很好地返回第一个元素:

n = driver.find_element_by_xpath("//*[@id='divDistrictContacts']/table/tbody//tr//*[text()='TITLE]")

n = driver.find_element_by_xpath("//*[@id='divDistrictContacts']/table/tbody//tr/td[text()='TITLE]")

但我不知道接下来该怎么办。我试着查找它,但似乎找不到如何从第一个元素的匹配文本中获取第二个元素。

我尝试在[text()=“TITLE']之后的变体中添加[position()=2]和[2],并更改xpath中的//和*,结果要么是“没有这样的元素”,要么是xpath无效。

如果这有帮助的话,这就是完整的xpath(我用I替换了tr索引,因为它是一个不可靠的值):

/html/body/div[1]/div[2]/div[5]/table/tbody/tr[i]/td[2]
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133614
文章 [ 2 ]  |  最新文章 3 年前
PatRiot
Reply   •   1 楼
PatRiot    3 年前

你在找 following-sibling

//td[text()='TITLE']//following-sibling::td

http://xpather.com/ 例子: enter image description here

furas
Reply   •   2 楼
furas    3 年前

你可以做一个 [ ] 在另一个里面 [ ]

也许是第一次使用 TITLE 得到 tr - //tr[td[text()="TITLE"]]

然后拿到第二名 td 在这个 tr - (//tr[td[text()="TITLE"]]//td)[2]


编辑:

你也可以使用 following-sibling

//td[text()="TITLE"]/following-sibling::td

完整的工作示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
#from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager

#driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())

html = '''<!DOCTYPE html>
<html>
<body>
<table>
<tr></tr>
<tr>
    <td class="gridTD">TITLE</td>
    <td class="gridTD">NAME</td>
</tr>
<tr></tr>
</table>
</body>
</html>
'''

driver.get("data:text/html;charset=utf-8," + html)

item = driver.find_element(By.XPATH, '(//tr[td[text()="TITLE"]]//td)[2]')
print(item.text)

item = driver.find_element(By.XPATH, '//td[text()="TITLE"]/following-sibling::td')
print(item.text)