迭代表格行图像并点击超链接

时间:2016-04-05 13:04:50

标签: python selenium selenium-webdriver

我有一个多行(tr)的表,其中包含多个单元格(td

其中一个单元格包含图像超链接

我会链接迭代表格行,并使用selenium点击包含每行图像的每个单元格。

例如,这是我的一个表格:

<table class="thetable" cellspacing="1" >

        <thead></thead>
        <tbody>

           <tr class="visibleRow">


               <td class="Item"></td>
               <td class="modified" style="color: gray;"></td>
               <td class="imageHyperlink">
                  <a href="#" role="button" title="Edit the item">
                       <img src="web/service/editRow.gif" />

                  </a>
                </td>
            </tr>

            <tr class="visibleRow"></tr>

            <tr class="anotherow" style="display: none;"></tr>

            <tr class="visibleRow"></tr>

            <tr class="editorRow" style="display: none;"></tr>
        </tbody>
</table>

我想要遍历的唯一行是包含类名visibleRow的行,并且需要单击的唯一单元格是包含类名imageHyperlink

我实现了一个for循环,它遍历类visibleRow的行,将单元类名存储在单元变量中。然后单击单元格:

for row in driver.find_elements_by_css_selector("tr.visibleRow"):
    cell = row.find_elements_by_class_name("imageHyperlink")
    cell.click()

但是我收到此错误,因为单元格似乎不是可点击的项目:

  

AttributeError:&#39; list&#39;对象没有属性&#39;点击&#39;

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

调用row.find_elements_by_class_name("imageHyperlink")(注意复数名称元素 s )会返回一个列表,在您的情况下,该列表将包含零个或一个元素。添加第二级迭代应该可以解决问题:

for row in driver.find_elements_by_css_selector("tr.visibleRow"):
    for cell in row.find_elements_by_class_name("imageHyperlink"):
        cell.find_element_by_tag_name("a").click()

内循环迭代具有类imageHyperLink的子元素;在您的示例中,将存在其中一个(对于第一个可见行)或无(对于其他行)。然后它会找到第一个<a>子元素并点击它。