【问题标题】:Extracting a table data from Webpage using Selenium webdriver使用 Selenium webdriver 从网页中提取表格数据
【发布时间】:2016-03-06 06:54:59
【问题描述】:

我正在使用 Selenium webdriver(在 Eclipse 中)来自动化 Web 应用程序,但是现在的要求是捕获显示在其中一个 html 页面中的表数据。 我尝试了herehere 和其他少数网站给出的解决方案,但是我们的网页似乎有一点不同的表格显示方式

尝试使用 div 类名作为 String Text = driver.findElements(By.xpath("//div[@class='ag-row ag-row-even ag-row-level-0']//tr")).get(0).getText(); 获取值,但没有成功,引发索引越界异常

【问题讨论】:

  • 您到底想获取什么? WW_SALESAPJ?
  • @JasonEstibeiro:整个表格

标签: java html selenium xpath selenium-webdriver


【解决方案1】:

据我所知,您似乎已经构建了一个自定义表格。 从所附图像中的 HTML 摘录来看,结构类似于:

<div class="ag-body-container" ...>
    <div class="row_1_class" ...>
        <div class="column_1_class" ...>
        <div class="column_2_class" ...>
        <div class="column_3_class" ...>
        <div class="column_4_class" ...>
        ... etc
    <div class="row_2_class" ...>
        <div class="column_1_class" ...>
        <div class="column_2_class" ...>
        <div class="column_3_class" ...>
        <div class="column_4_class" ...>
        ... etc

但是您的 xPath 假设您有表格行(我猜之后可能是表格单元格):

By.xpath("//div[@class='ag-row ag-row-even ag-row-level-0']//tr")

导致您的数组为空(很有趣,您没有得到NoSuchElement 异常,也许在您的html 树中某处有一些tr 标签)。

现在,我不确定您要从该表中提取什么数据,但您最好的尝试是根据 class 属性获取所有行,并为每一行获取所有列数据同样基于class 属性(或者您甚至可以使用col 属性)。

编辑: 要获取所有元素,您可以获取所有行,然后为每一行获取所有列数据:

//Get all the rows from the table
List<WebElement> rows = driver.findElements(By.xpath("//div[contains(@class, 'ag-row')));

//Initialize a new array list to store the text
List<String> tableData = new ArrayList<String>();

//For each row, get the column data and store into the tableData object
for (int i=0; i < rows.size(); i++) {
    //Since you also have some span tags inside (and maybe something else)
    //we first get the div columns
    WebElement tableCell = rows.get(i).findElements(By.xpath("//div[contains(@class, 'ag-cell')]"));
    tableData.add(tableCell.get(0).getText());
}

您还可以将数据存储到双向数组(或任何此类)中,然后根据行号和列号位置访问数据。

【讨论】:

  • 我正在尝试读取所有表格数据,因为我需要将此数据与其他一些具有相同结构的表格数据进行比较。
  • @Vinod 更新了我的答案。这样,您将拥有一个包含表中所有数据的列表。
【解决方案2】:

我不确定,但可能你的 webElements 数组是空的,这就是为什么你得到 Index out of bounds 异常。

如果您尝试从整个 WW_SALES 行中获取价值,我认为 find_elements 应该找出父 div - class="ag-row ag-row-even ag-row-level-0"

这只是我根据所附描述和图片的假设。

【讨论】:

    猜你喜欢
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    相关资源
    最近更新 更多