如何通过匹配第一个元素的文本来获取第二个元素。在硒中,Python
How to get the second element by matching text from the first element. In Selenium, Python
HTML 参考片段:
<tr>
</tr>
<tr>
<td class="gridTD">TITLE</td>
<td class="gridTD">NAME</td>
</tr>
<tr>
</tr>
有一系列tr元素的位置发生变化,所以我必须从td子中的文本中找到具体的一个-元素。
我试图通过匹配 first[=36= 中的文本来获取 second td 元素] td 元素,但我不知道如何访问它。
我是 Selenium 的新手,刚开始使用 xpaths 定位元素。
这些return第一个元素就好了:
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 中的 // 和 *,我要么得到“没有这样的元素”或无效的 xpaths。
如果这有帮助,这是完整的 xpath(我用 i 替换了 tr 索引,因为它是一个不可靠的值):
/html/body/div[1]/div[2]/div[5]/table/tbody/tr[i]/td[2]
您可以将一个 [ ]
嵌套在另一个 [ ]
中
也许先用TITLE
得到tr
-//tr[td[text()="TITLE"]]
然后在 tr
- (//tr[td[text()="TITLE"]]//td)[2]
中获得第二名 td
编辑:
您也可以使用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)
您正在寻找following-sibling
//td[text()='TITLE']//following-sibling::td
HTML 参考片段:
<tr>
</tr>
<tr>
<td class="gridTD">TITLE</td>
<td class="gridTD">NAME</td>
</tr>
<tr>
</tr>
有一系列tr元素的位置发生变化,所以我必须从td子中的文本中找到具体的一个-元素。 我试图通过匹配 first[=36= 中的文本来获取 second td 元素] td 元素,但我不知道如何访问它。
我是 Selenium 的新手,刚开始使用 xpaths 定位元素。
这些return第一个元素就好了:
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 中的 // 和 *,我要么得到“没有这样的元素”或无效的 xpaths。
如果这有帮助,这是完整的 xpath(我用 i 替换了 tr 索引,因为它是一个不可靠的值):
/html/body/div[1]/div[2]/div[5]/table/tbody/tr[i]/td[2]
您可以将一个 [ ]
嵌套在另一个 [ ]
也许先用TITLE
得到tr
-//tr[td[text()="TITLE"]]
然后在 tr
- (//tr[td[text()="TITLE"]]//td)[2]
td
编辑:
您也可以使用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)
您正在寻找following-sibling
//td[text()='TITLE']//following-sibling::td