具有相同 ID 的 Xpath - 如何获取第二个元素?
Xpath with same ID - how can I grab 2nd element?
我在从页面获取值时遇到问题,在我操作的框架中有 3 个具有相同 ID 的 xpath,我无法使用更精确的一个 - 或者不知道如何去做。
我已经尝试在 xpath 之后添加 [0] 或 [1],但结果并不像:
Temp_Pass = WebDriverWait(driver,9000).until(EC.presence_of_element_located((By.XPATH, "//td[@id='content-main-rowOdd']")[0])).text
和
Temp_Pass = WebDriverWait(driver, 9000).until(EC.presence_of_element_located((By.XPATH, "//td[@id='content-main-rowOdd']/following-sibling::tr[1]"))).text
但这两种方法都不行
这是来自网站框架的代码:
<tbody>
<tr>
<td id="content-main-rowOdd">For user zxc the fallowing pass has been generated:</td>
</tr>
<tr>
<td id="content-main-rowOdd">
abcd
<div></div>
</td>
</tr>
<tr>
<td id="content-main-rowOdd">
<input id="content-main-button-default" type="submit" onlick="window.close()" name="command-cancel" value="cancel">
<input id="content-main-button-default" type="submit" name="command-next" value="Next">
</td>
</tr>
.....
</tbody>
我想得到的是"abcd"
但我只能抓住:"For user zxc the following pass has been generated:"
由于 <td>
元素位于单独的 <tr>
元素中,如果预期元素位于第二个 <tr>
元素内,那么您可以尝试这样做:"//table/tr[2]/td[@id='content-main-rowOdd']"
在代码中:
Temp_Pass = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "//table/tr[2]/td[@id='content-main-rowOdd']"))).text
使用find_elements_by_
获取所有元素,然后从第二个元素获取文本。
list = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.XPATH,"//td[@id='content-main-rowOdd']")));
Temp_Pass = list[1].text
这是获取第二个元素所需的 XPath。您可以在 XPath select 上使用 [2]
或者,但使用起来有点奇怪。
Temp_Pass = WebDriverWait(driver,9000).until(EC.presence_of_element_located((By.XPATH, "(//td[@id='content-main-rowOdd'])[2]"))).text
请注意 XPath 包含方括号,然后我们 select 从该 XPath 返回的第二项。
你快到了。由于文本 abcd 与文本 相关联,对于用户 zxc,已生成休闲通道:,一种提取文本 [=19] 的简单方法=]abcd 将识别文本为 For user ... 的节点,然后识别所需的节点诱导 WebDriverWait对于 visibility_of_element_located()
然后提取所需的文本如下:
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[@id='content-main-rowOdd' and contains(., 'generated')]//following::tr[1]/td[@id='content-main-rowOdd']"))).get_attribute("innerHTML"))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我在从页面获取值时遇到问题,在我操作的框架中有 3 个具有相同 ID 的 xpath,我无法使用更精确的一个 - 或者不知道如何去做。
我已经尝试在 xpath 之后添加 [0] 或 [1],但结果并不像:
Temp_Pass = WebDriverWait(driver,9000).until(EC.presence_of_element_located((By.XPATH, "//td[@id='content-main-rowOdd']")[0])).text
和
Temp_Pass = WebDriverWait(driver, 9000).until(EC.presence_of_element_located((By.XPATH, "//td[@id='content-main-rowOdd']/following-sibling::tr[1]"))).text
但这两种方法都不行
这是来自网站框架的代码:
<tbody>
<tr>
<td id="content-main-rowOdd">For user zxc the fallowing pass has been generated:</td>
</tr>
<tr>
<td id="content-main-rowOdd">
abcd
<div></div>
</td>
</tr>
<tr>
<td id="content-main-rowOdd">
<input id="content-main-button-default" type="submit" onlick="window.close()" name="command-cancel" value="cancel">
<input id="content-main-button-default" type="submit" name="command-next" value="Next">
</td>
</tr>
.....
</tbody>
我想得到的是"abcd" 但我只能抓住:"For user zxc the following pass has been generated:"
由于
<td>
元素位于单独的<tr>
元素中,如果预期元素位于第二个<tr>
元素内,那么您可以尝试这样做:"//table/tr[2]/td[@id='content-main-rowOdd']"
在代码中:Temp_Pass = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "//table/tr[2]/td[@id='content-main-rowOdd']"))).text
使用
find_elements_by_
获取所有元素,然后从第二个元素获取文本。list = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.XPATH,"//td[@id='content-main-rowOdd']"))); Temp_Pass = list[1].text
这是获取第二个元素所需的 XPath。您可以在 XPath select 上使用 [2]
或者,但使用起来有点奇怪。
Temp_Pass = WebDriverWait(driver,9000).until(EC.presence_of_element_located((By.XPATH, "(//td[@id='content-main-rowOdd'])[2]"))).text
请注意 XPath 包含方括号,然后我们 select 从该 XPath 返回的第二项。
你快到了。由于文本 abcd 与文本 相关联,对于用户 zxc,已生成休闲通道:,一种提取文本 [=19] 的简单方法=]abcd 将识别文本为 For user ... 的节点,然后识别所需的节点诱导 WebDriverWait对于 visibility_of_element_located()
然后提取所需的文本如下:
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[@id='content-main-rowOdd' and contains(., 'generated')]//following::tr[1]/td[@id='content-main-rowOdd']"))).get_attribute("innerHTML"))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC