为了账号安全,请及时绑定邮箱和手机立即绑定

在java中使用selenium刮表

在java中使用selenium刮表

一只斗牛犬 2022-06-23 20:27:37
我正在从具有以下格式的事务表中 抓取帐户的事务:-表格式如果我知道行数,那么我可以遍历它并通过为每个字段使用单独的定位器来获取所需的数据我如何刮掉这些整张桌子,因为我不知道会有多少交易,我需要一些东西,通过它我可以遍历它并刮掉交易。我正在使用 selenium在 java 中进行抓取。这是交易表的 HTML:-<div id="txn-display"> <!-- Transactions start  --><!--#include virtual="mobile-statement.shtml" -->    <table id="txn-display-table">        <thead>            <tr>                <th>Date</th>                <th colspan="2">Description</th>                <th>Type</th>                <th class="amount-cell">Amount Spent  (<em class="WebRupee">Rs.</em>)</th>                                    </tr>        </thead>        <tbody>            <tr class="gridEven">                <td>12/02/2019</td>                <td colspan="2" class="word-break">INTERGLOBE AVIATION LT .             IND</td>                <td class="txn-type">Debit</td>                <td class="amount-cell">320</td>                                    </tr>            <tr class="gridOdd">                <td>27/01/2019</td>                <td colspan="2" class="word-break">PETROL TRXN FEE RVRSL EXCLUDING TAX</td>                <td class="txn-type">Credit</td>                <td class="amount-cell">8.21</td>                                   </tr>            <tr class="gridEven">                <td>27/01/2019</td>                <td colspan="2" class="word-break">SHELL R K R ENTERPRISE BANGALORE     IND</td>                <td class="txn-type">Debit</td>                <td class="amount-cell">831.06</td>                                 </tr>        </tbody>    </table>        </div>
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

下面提到的代码将自动计算表中提到的行和列。它适用于带有tr和td标记名的表。您只需要将 web 表 xpath 传递给代码。


@Test 

public void testWebTable()  { 

WebElement simpleTable = driver.findElement(By.xpath("//table[@id='txn-display-table']//tbody")); 


    // Get all rows 

    List<WebElement> rows = simpleTable.findElements(By.tagName("tr")); 

    Assert.assertEquals(rows.size(),4); 


    // Print data from each row 

    for (WebElement row : rows) { 

        List<WebElement> cols = row.findElements(By.tagName("td")); 

        for (WebElement col : cols) {

             System.out.print(col.getText() + "\t"); 

           } System.out.println(); 

       }

    }


查看完整回答
反对 回复 2022-06-23
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

您尚未发布 HTML,因此以我自己的示例为例,我正在使用 row 和 col 计数进行迭代,请检查并让我们知道您是否有任何疑问..


package Testng_Pack;


import java.util.concurrent.TimeUnit;


import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.annotations.AfterTest;

import org.testng.annotations.BeforeTest;

import org.testng.annotations.Test;


public class table { 


 WebDriver driver = null;

 @BeforeTest

    public void setup() throws Exception { 

         System.setProperty("webdriver.gecko.driver", "D:\\Selenium Files\\geckodriver.exe");

  driver = new FirefoxDriver();

         driver.manage().window().maximize();

         driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

         driver.get("Pass the URL here"); 

    } 


  @AfterTest

 public void tearDown() throws Exception { 

   driver.quit();

     } 


 @Test

 public void print_data(){


 //Get number of rows In table.

 int Row_count = driver.findElements(By.xpath("//*[@id='post-body-6522850981930750493']/div[1]/table/tbody/tr")).size();

 System.out.println("Number Of Rows = "+Row_count);


 //Get number of columns In table.

 int Col_count = driver.findElements(By.xpath("//*[@id='post-body-6522850981930750493']/div[1]/table/tbody/tr[1]/td")).size();

 System.out.println("Number Of Columns = "+Col_count);


 //divided xpath In three parts to pass Row_count and Col_count values.

 String first_part = "//*[@id='post-body-6522850981930750493']/div[1]/table/tbody/tr[";

 String second_part = "]/td[";

 String third_part = "]";


 //Used for loop for number of rows.

 for (int i=1; i<=Row_count; i++){

  //Used for loop for number of columns.

  for(int j=1; j<=Col_count; j++){

   //Prepared final xpath of specific cell as per values of i and j.

   String final_xpath = first_part+i+second_part+j+third_part;

   //Will retrieve value from located cell and print It.

   String Table_data = driver.findElement(By.xpath(final_xpath)).getText();

   System.out.print(Table_data +"  ");   

  }

   System.out.println("");

   System.out.println("");  

 } 

 }

}


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 226 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号