在Selenium 2 WebDriver(python)中遍历表

时间:2012-08-21 14:29:24

标签: python selenium selenium-webdriver html-table

我在HTML中有以下表格布局(相应地更改):

<table class="other-table-style">

    <tr> 
      <th>First Name</th>
      <th>Last Name</th>
      <th>Age</th>
    </tr>
    <tr>
      <td align="center" width="30%">Joe</td>
      <td align="center" width="30%">Bloggs</td>
      <td align="center" width="40%">28</td>
    </tr>
    <tr>
      <td align="center" width="30%">John</td>
      <td align="center" width="30%">Doe</td>
      <td align="center" width="40%">30</td>
    </tr>

</table>

我希望能够使用Selenium 2.0 WebDriver进行迭代,但我找不到任何好的例子。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:11)

用于:

from selenium.webdriver.common.by import By

trs = driver.find_elements(By.TAG_NAME, "tr") 

tds = trs[1].find_elements(By.TAG_NAME, "td")

这允许循环遍历每个按钮。

答案 1 :(得分:2)

似乎发布this related question的人的代码可以让您走上正轨:

for (WebElement trElement : tr_collection) {
    List<WebElement> td_collection = trElement.findElements(By.xpath("td"));
    System.out.println("NUMBER OF COLUMNS = " + td_collection.size());
    col_num = 1;          

    if (!td_collection.isEmpty() && td_collection.size() != 1 ) {  
        for (WebElement tdElement : td_collection) {
            System.out.println("Node Name=== " + tdElement.getAttribute("class")); 
            System.out.println("Node Value=== " + tdElement.getText());
            col_num++;
        }
    }

    row_num++;
}

编辑:我稍微更改了他们的代码......他们正在累积每个td的类以及它包含在hashmap中的文本,然后一旦他们遍历了整个表,将其添加到主哈希映射。这也是Selenium的Java变种,因此您必须将其移植。它的内容仍然是相同的 - 也许拥有更多Selenium经验的人可以提供更多信息......我宁愿自己住在WATIR土地上。

答案 2 :(得分:1)

Here is an excellent tutorial for parsing tables (and links) using selenium。虽然它是用Java编写的,但是对Python的翻译非常简单。

例如,使用Python版本的Selenium(2.41)读取表的第2行第2列:

from selenium import webdriver
driver = webdriver.Ie()

# assuming you're connected to your web page of interest, do:
x = driver.find_element_by_xpath('//table/tbody/tr[2]/td[2]')