我有这样一个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>
我想按文本行找到一个表格,然后单击垃圾桶图标将其删除。
所以我的想法是循环行<代码>
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()
我的理解是,驱动程序是整个页面tbody就是该页面中的tbody元素。因此,无论我试图从那里找到什么,都必须是该元素的子元素。为了确认,我打印出td元素的长度,该元素打印出“3”。
删除按钮删除=行。通过xpath(“//img[@alt=“trashcan”]”)查找\u element\u
从第一行而不是第二行选择删除按钮。
我也试过了
delete = row.find_elements_by_xpath('//img[@alt="trashcan"]')
delete[0].click()
但它也选择行。
只是为了确保我打印出了if条件下的行(print(row.get_attribute("innerHTML"))
,它打印出了第二行。
知道发生了什么或者我如何选择第二行中的img
吗?
您可以尝试更改for循环。与范围(1,len(tr))中的i类似:它跳过第一个。或者您可以在for循环之前弹出tr中的第一个元素。
xpath只会为您提供它找到的第一条路径。
我不确定您对JavaScript有多熟悉,但我倾向于使用css\u选择器查找元素。它允许您在运行文档时输入相同的参数。querySelectorAll(查询选择全部)。
在您的情况下,您可以这样做:
text_to_find = 'If this is spotted, then delete'
# Find all tds
trs = driver.find_elements_by_css_selector("td")
# Iterate over each tr insde a td.
for tr in trs:
for td in tr.find_elements_by_css_selector('tr'):
# If any td text is equal to the text you wish to delete, then click on the trashcan and then move onto the next td.
if td.text == text_to_find:
tr.find_element_by_css_selector("[alt='trashcan']").click() # notice that I removed the 's' in elements.
break
使用text()方法可以找到正确的XPath,如下所示:
//td[contains(text(),'Some More Text')]/../td[3]
或:
//td[contains(text(),'Some More Text')]/parent::tr/td[3]
第一个只是上升一级,然后寻找第三个td元素。
第二种方法看起来像父元素,就像这里描述的XPath:从子节点获取父节点。
尝试将其应用到您的循环中。
我试图自动化YouTube搜索,点击搜索结果,然后跟随右侧的推荐视频。我写的代码进入youtube,进行搜索,点击视频,视频就会在浏览器上打开。但是,我不能带它点击其中一个推荐的视频。 问题似乎在于,当我使用从右边获取推荐视频元素的列表时,我得到的是上一页的列表(当我第一次输入单词并获得搜索结果时)。 当我使用直接转到视频链接时,代码确实可以正常工作,而不是先进行搜索。 所以当我点击(最后一行)时
我对在Selenium中使用python还很陌生。
我想运行一个selenium测试,当单击旧页面中的按钮时,它是否导航到新页面。然后我想测试当新页面中的按钮被点击时,它是否导航回旧页面。 当我单击第一页上的按钮并检查新页面上的按钮元素是否出现时,测试工作正常。但是当我使用selenium点击第二页上的button元素,检查第一页上的button元素是否已经出现时,它没有找到第一页上的button元素,尽管我第一次使用相同的button元素去第二页
问题内容: 我只想从汤中最上面的元素中提取文本;但是汤.text也会给出所有子元素的文本: 我有 输出为。我只想“是”。 实现此目标的最佳方法是什么? 编辑 :我也想在解析’ ‘时输出。 问题答案: 那又如何呢? 编辑: 我想我已经了解了你现在想要的。尝试这个:
当我在wordpress页面上显示一些产品时,我想显示一个简短的描述链接到一个相关的pdf(理想情况下使用pdf图标作为链接) 我已经设法通过使用以下代码来显示简短的描述-但是我如何在已经添加到产品中的元数据中添加一些东西(元数据:pdf_link)-它是一个. pdf文件的网址 添加动作(“购物”后加上“购物”后加上“购物”后加上“购物”后加上“购物”后加上“购物”后加上“购物”后加上“购物”后
我遇到了这种奇怪的情况。 > 我首先在第1页,它有一个id为“abc”的元素,我使用“abc”查找webElement并获得它的文本值 我点击了第1页的一个链接,它把我带到了第2页 值得注意的是,如果在页面切换之间插入硬编码延迟(线程Hibernate等),就不会出现过时的问题。 谢谢,