【发布时间】:2021-07-31 01:52:07
【问题描述】:
我有一个像这样的 html 元素:
<table>
<tbody>
<tr>
<td>My Text</td>
<td>Some Other Text</td>
<td><img src="../delete.png" alt="trashcan"></td>
</tr>
<tr>
<td>More Text</td>
<td>Some More Text</td>
<td><img src="../delete.png" alt="trashcan"></td>
</tr>
</tbody>
</table>
我想逐行查找表格,然后点击垃圾桶图标将其删除。
所以我的想法是遍历行<tr/>,然后遍历单元格<td/>。如果文本与单元格文本匹配,则从该行中找到XPATH 的图像,然后单击它。
tbody = driver.find_element_by_tag_name("tbody")
tr = tbody.find_elements_by_tag_name("tr")
for row in tr:
td = row.find_elements_by_tag_name("td")
print(len(td))
for cell in td:
if cell.text == "More Text":
delete = row.find_element_by_xpath('//img[@alt="trashcan"]')
delete.click()
我的理解是driver是整个页面。 tbody 只是该页面中的 tbody 元素。因此,无论我试图从那里找到什么,都必须是该元素的子元素。为了确认我打印出 td 元素的长度,即打印出“3”。
删除按钮delete = row.find_element_by_xpath('//img[@alt="trashcan"]')
从第一行而不是第二行选择删除按钮。
我也试过
delete = row.find_elements_by_xpath('//img[@alt="trashcan"]')
delete[0].click()
但它也选择了行。
只是为了确保我在 if 条件下打印出该行(print(row.get_attribute("innerHTML")) 并打印出第二行。
有什么想法或者我可以如何选择第二行中的img 吗?
【问题讨论】:
-
检查我的 HTML 格式编辑。你可能在那里搞错了。在此处查看规则w3schools.com/tags/tag_tr.asp
标签: python selenium selenium-webdriver web-scraping xpath