selenium - python - 获取包含元素的 table 行
selenium - python - fetch the table row containing element
我正在获取 table 中的元素:
<tbody id="actiontable-tbody">
<tr>
<td class="letterbreak first">default</td> <!-- first fetch this element -->
<td class="letterbreak">Internal</td>
<td class="action-btn-cell" id="id9c">
</tr>
<tr>
<td class="letterbreak first odd">opcua-module</td>
<td class="letterbreak odd">Internal</td>
<td class="action-btn-cell" id="id9d">
</td>
</tr>
</tbody>
我首先获取其中一行中的一个元素:
element = driver.find_element(By.XPATH,"//*[text()='default']")
现在我想获取包含该元素的行。我试过了:
row = element.parent
但这是返回一个 webDriver
对象。如何获取与该行中的元素相关的行?
编辑:最终目标是获取同一行中的“action-btn-cell”元素。所以我试图上升一个节点并获取行节点,然后获取“action-btn-cell”。一旦我获取了第一个元素,我可以获取它的兄弟姐妹吗?获取需要从第一个获取的元素开始,通过向上到行节点或获取兄弟节点,而不是循环遍历所有行(这是算法实现方式的限制)。
使用 and python you can use either of the following :
提取并打印属于包含文本 default 的同一 <tr>
的文本
使用 xpath 和 text 属性:
print([my_elem.text for my_elem in driver.find_elements_by_xpath("//td[text()='default']/..")])
使用 xpath、parent 和 text 属性:
print([my_elem.text for my_elem in driver.find_elements_by_xpath("//td[text()='default']//parent::tr[1]")])
使用 xpath、ancestor 和 text 属性:
print([my_elem.text for my_elem in driver.find_elements_by_xpath("//td[text()='default']//ancestor::tr[1]")])
理想情况下你需要诱导 for visibility_of_all_elements_located()
and you can use either of the following :
使用 xpath 和 text 属性:
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//td[text()='default']//parent::tr[1]")))])
使用 xpath、parent 和 text 属性:
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//td[text()='default']//parent::tr[1]")))])
使用 xpath、ancestor 和 text 属性:
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//td[text()='default']//ancestor::tr[1]")))])
要识别元素 <td class="action-btn-cell" id="id9c">
,请使用以下任一 xpath。
选项 1:使用 following-sibling
//*[text()='default']/following-sibling::td[@class='action-btn-cell']
或
//*[text()='default']/following-sibling::td[2]
选项 2:识别 parent 然后跟随 child.
//tr[.//*[text()='default']]/td[@class='action-btn-cell']
或
//tr[.//*[text()='default']]/td[2]
示例:
driver.find_element_by_xpath("//tr[.//*[text()='default']]/td[@class='action-btn-cell']")
我正在获取 table 中的元素:
<tbody id="actiontable-tbody">
<tr>
<td class="letterbreak first">default</td> <!-- first fetch this element -->
<td class="letterbreak">Internal</td>
<td class="action-btn-cell" id="id9c">
</tr>
<tr>
<td class="letterbreak first odd">opcua-module</td>
<td class="letterbreak odd">Internal</td>
<td class="action-btn-cell" id="id9d">
</td>
</tr>
</tbody>
我首先获取其中一行中的一个元素:
element = driver.find_element(By.XPATH,"//*[text()='default']")
现在我想获取包含该元素的行。我试过了:
row = element.parent
但这是返回一个 webDriver
对象。如何获取与该行中的元素相关的行?
编辑:最终目标是获取同一行中的“action-btn-cell”元素。所以我试图上升一个节点并获取行节点,然后获取“action-btn-cell”。一旦我获取了第一个元素,我可以获取它的兄弟姐妹吗?获取需要从第一个获取的元素开始,通过向上到行节点或获取兄弟节点,而不是循环遍历所有行(这是算法实现方式的限制)。
使用
<tr>
的文本
使用 xpath 和 text 属性:
print([my_elem.text for my_elem in driver.find_elements_by_xpath("//td[text()='default']/..")])
使用 xpath、parent 和 text 属性:
print([my_elem.text for my_elem in driver.find_elements_by_xpath("//td[text()='default']//parent::tr[1]")])
使用 xpath、ancestor 和 text 属性:
print([my_elem.text for my_elem in driver.find_elements_by_xpath("//td[text()='default']//ancestor::tr[1]")])
理想情况下你需要诱导 visibility_of_all_elements_located()
and you can use either of the following
使用 xpath 和 text 属性:
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//td[text()='default']//parent::tr[1]")))])
使用 xpath、parent 和 text 属性:
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//td[text()='default']//parent::tr[1]")))])
使用 xpath、ancestor 和 text 属性:
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//td[text()='default']//ancestor::tr[1]")))])
要识别元素 <td class="action-btn-cell" id="id9c">
,请使用以下任一 xpath。
选项 1:使用 following-sibling
//*[text()='default']/following-sibling::td[@class='action-btn-cell']
或
//*[text()='default']/following-sibling::td[2]
选项 2:识别 parent 然后跟随 child.
//tr[.//*[text()='default']]/td[@class='action-btn-cell']
或
//tr[.//*[text()='default']]/td[2]
示例:
driver.find_element_by_xpath("//tr[.//*[text()='default']]/td[@class='action-btn-cell']")