다음을 사용하여 동적 웹 테이블 처리 Selenium 웹드라이버

웹 테이블 Selenium

웹에는 두 가지 유형의 HTML 테이블이 게시되어 있습니다.

  1. 정적 테이블: 데이터는 정적입니다. 즉, 행과 열의 수가 고정되어 있습니다.
  2. 동적 테이블: 데이터는 동적입니다. 즉, 행과 열의 수가 고정되어 있지 않습니다.

동적 테이블을 처리하는 방법 Selenium

다음은 동적 웹 테이블의 예입니다. Selenium 판매용. 입력 날짜 필터에 따라 행 수가 변경됩니다. 따라서 본질적으로 역동적입니다.

동적 테이블 처리 Selenium

정적 테이블을 처리하는 것은 쉽지만 동적 테이블을 처리하는 방법은 다음과 같습니다. Selenium 행과 열이 일정하지 않기 때문에 약간 어렵습니다.

X-Path를 사용하여 웹 테이블 요소 찾기

웹 요소를 찾기 전에 먼저 이해해 보겠습니다.

웹 요소란 무엇입니까?

웹 요소는 텍스트 상자, 드롭다운 라디오 버튼, 제출 버튼 등과 같은 HTML 요소에 불과합니다. 이러한 HTML 요소는 다음과 같이 작성됩니다. 스타트 태그를 지정하고 다음으로 끝납니다. end 꼬리표.

예를 들어,

나의 첫 HTML 문서.

찾으려는 웹 요소의 X-경로를 가져오는 단계입니다.

단계 1) Chrome에서는 다음으로 이동하세요. https://demo.guru99.com/test/web-table-element.php

X-Path를 사용하여 웹 테이블 요소 찾기

단계 2) x-path를 가져올 웹 요소를 마우스 오른쪽 버튼으로 클릭합니다. 우리의 경우, "회사"를 마우스 오른쪽 버튼으로 클릭하고 검사 옵션을 선택합니다. 다음 화면이 표시됩니다.

X-Path를 사용하여 웹 테이블 요소 찾기

단계 3) 강조 표시된 웹 요소를 마우스 오른쪽 버튼으로 클릭하고 복사 -> x 경로 복사 옵션을 선택합니다.

X-Path를 사용하여 웹 테이블 요소 찾기

단계 4) 복사된 X-path "//*[@id="leftcontainer"]/table/thead/tr/th [1]"을 사용합니다. Selenium WebDriver를 사용하여 요소를 찾습니다.

예: 동적 웹테이블에서 행 및 열 수 가져오기

동적 웹 테이블을 처리하는 동안 Selenium, 행과 열 수를 예측할 수 없습니다.

사용 Selenium 웹 드라이버, 우리는 찾을 수 있습니다

  • 웹 테이블의 행과 열 수 Selenium
  • X 행 또는 Y 열의 데이터입니다.

다음은 웹 테이블을 처리하기 위해 총 행과 열 수를 가져오는 프로그램입니다. Selenium:

행 및 열 수 가져오기

import java.text.ParseException;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Noofrowsandcols {
    
public static void main(String[] args) throws ParseException {
    	WebDriver wd;
	  System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
	  wd= new ChromeDriver();
        wd.get("https://demo.guru99.com/test/web-table-element.php");         
        //No.of Columns
        List <webelement> col = wd.findElements(By.xpath(".//*[@id=\"leftcontainer\"]/table/thead/tr/th"));
        System.out.println("No of cols are : " +col.size()); 
        //No.of rows 
        List <webelement> rows = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); 
        System.out.println("No of rows are : " + rows.size());
        wd.close();
    }
}

코드 설명 :

  • 여기서는 먼저 웹 드라이버 개체 "wd"를 선언하고 이를 크롬 드라이버로 초기화했습니다.
  • 우리는 목록을 사용합니다 "col"의 총 열 수입니다.
  • findElements 명령은 지정된 위치 지정자와 일치하는 모든 요소의 목록을 반환합니다.
  • findElements 및 X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th를 사용하여 모든 열을 얻습니다.
  • 마찬가지로 행에 대해서도 프로세스를 반복합니다.

출력:

행 및 열 수 가져오기

예: 동적 테이블의 특정 행과 열의 셀 값 가져오기

3개가 필요하다고 가정해보자rd 테이블의 행과 두 번째 셀의 데이터입니다. 아래 표를 참조하세요-

특정 행과 열의 셀 값 가져오기

위의 표에서 데이터는 일정 시간이 지난 후 정기적으로 업데이트됩니다. 검색하려는 데이터는 위 스크린샷과 다릅니다. 그러나 코드는 동일하게 유지됩니다. 다음은 3을 얻는 샘플 프로그램입니다.rd 행과 2nd 열의 데이터입니다.

특정 행과 열의 셀 값 가져오기

import java.text.ParseException;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;


public class RowandCell {
    public static void main(String[] args) throws ParseException {
    	WebDriver wd;
		System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
		 wd= new ChromeDriver();
		 wd.get("https://demo.guru99.com/test/web-table-element.php"); 
		 wd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
		 WebElement baseTable = wd.findElement(By.tagName("table"));
		  
		 //To find third row of table
		 WebElement tableRow = baseTable.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]"));
         String rowtext = tableRow.getText();
		 System.out.println("Third row of table : "+rowtext);
		    
		    //to get 3rd row's 2nd column data
		    WebElement cellIneed = tableRow.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]/td[2]"));
		    String valueIneed = cellIneed.getText();
		    System.out.println("Cell value is : " + valueIneed); 
		    wd.close();
    }
}

코드 설명 :

  • 테이블은 로케이터 속성 "tagname"을 사용하여 찾습니다.
  • 사용 xpath "//*[@id=\"leftcontainer\"]/table/tbody/tr[3]" 3을 찾습니다.rd getText() 함수를 사용하여 행의 텍스트를 가져옵니다.
  • Xpath "//*[@id=\"leftcontainer\"]/table/tbody/tr[3]/td[2]"를 사용하여 2에서 두 번째 셀을 찾습니다.rd getText() 함수를 사용하여 행의 텍스트를 가져옵니다.

산출:

동적 테이블의 특정 행과 열의 셀 값 가져오기

예: 동적 테이블의 열에 있는 모든 값의 최대값 가져오기

이 예에서는 특정 열에 있는 모든 값의 최대값을 가져옵니다.

다음 표를 참조하세요 –

동적 테이블의 열에 있는 모든 값의 최대값 얻기

다음은 코드입니다.

동적 테이블의 열에 있는 모든 값의 최대값 얻기

import java.text.ParseException;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.text.NumberFormat;


public class MaxFromTable {
    public static void main(String[] args) throws ParseException {
    	WebDriver wd;
		System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
		 wd= new ChromeDriver();
		 wd.get("https://demo.guru99.com/test/web-table-element.php"); 
		 String max;
	     double m=0,r=0;
		 
	       //No. of Columns
	        List <webelement> col = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/thead/tr/th"));
	        System.out.println("Total No of columns are : " +col.size());
	        //No.of rows
	        List <webelement> rows = wd.findElements(By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]"));
	        System.out.println("Total No of rows are : " + rows.size());
	        for (int i =1;i<rows.size();i++)
	        {    
	            max= wd.findElement(By.xpath("html/body/div[1]/div[5]/table/tbody/tr[" + (i+1)+ "]/td[4]")).getText();
	            NumberFormat f =NumberFormat.getNumberInstance(); 
	            Number num = f.parse(max);
	            max = num.toString();
	            m = Double.parseDouble(max);
	            if(m>r)
	             {    
	                r=m;
	             }
	        }
	        System.out.println("Maximum current price is : "+ r);
    }
}

</webelement></webelement>

코드 설명 :

  • Chrome 드라이버를 사용하여 웹 테이블을 찾고 XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"을 사용하여 총 행 수를 가져옵니다.
  • for 루프를 사용하여 총 행 수를 반복하고 값을 하나씩 가져옵니다. 다음 행을 얻으려면 XPath에서 (i+1)을 사용합니다.
  • 이전 값과 새 값을 비교하고 for 루프 끝에 최대값이 인쇄됩니다.

산출

동적 테이블의 열에 있는 모든 값의 최대값 얻기

예: 동적 테이블의 모든 값 가져오기

다음 표를 고려하십시오. https://demo.guru99.com/test/table.html

동적 테이블의 모든 값 가져오기

각 행의 열 수가 다릅니다.

여기서 행 번호 1, 2, 4에는 3개의 셀이 있고, 행 번호 3에는 2개의 셀이 있으며, 행 번호 5에는 1개의 셀이 있습니다.

모든 셀의 값을 가져와야 합니다.

다음은 코드입니다 :

동적 테이블의 모든 값 가져오기

import java.text.ParseException;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.chrome.ChromeDriver;



public class NofRowsColmns {
    public static void main(String[] args) throws ParseException {
    	WebDriver wd;
    	System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
    	wd = new ChromeDriver();
    	wd.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    	wd.get("https://demo.guru99.com/test/table.html");
    	//To locate table.
    	WebElement mytable = wd.findElement(By.xpath("/html/body/table/tbody"));
    	//To locate rows of table. 
    	List < WebElement > rows_table = mytable.findElements(By.tagName("tr"));
    	//To calculate no of rows In table.
    	int rows_count = rows_table.size();
    	//Loop will execute till the last row of table.
    	for (int row = 0; row < rows_count; row++) {
    	    //To locate columns(cells) of that specific row.
    	    List < WebElement > Columns_row = rows_table.get(row).findElements(By.tagName("td"));
    	    //To calculate no of columns (cells). In that specific row.
    	    int columns_count = Columns_row.size();
    	    System.out.println("Number of cells In Row " + row + " are " + columns_count);
    	    //Loop will execute till the last cell of that specific row.
    	    for (int column = 0; column < columns_count; column++) {
    	        // To retrieve text from that specific cell.
    	        String celtext = Columns_row.get(column).getText();
    	        System.out.println("Cell Value of row number " + row + " and column number " + column + " Is " + celtext);
    	    }
    	    System.out.println("-------------------------------------------------- ");
    	}
   	}
}

코드 설명 :

  • Rows_count는 총 행 수를 제공합니다.
  • 각 행에 대해 다음을 사용하여 총 열 수를 얻습니다. rows_table.get(row).findElements(By.tagName("td"));
  • 각 열과 각 행을 반복하고 값을 가져옵니다.

산출:

동적 테이블의 모든 값 가져오기

요약

  • By.xpath()는 일반적으로 테이블 요소에 액세스하는 데 사용됩니다.
  • 정적 웹 테이블 Selenium 성격이 일관성이 있다. 즉, 셀 데이터뿐만 아니라 행 수도 고정되어 있습니다.
  • 동적 웹 테이블은 일관성이 없습니다. 즉, 고정된 수의 행과 셀 데이터가 없습니다.
  • 셀레늄 웹 드라이버를 사용하면 동적 웹 테이블을 쉽게 처리할 수 있습니다.
  • Selenium Webdriver를 사용하면 동적 웹 테이블에 액세스할 수 있습니다. X 경로

상세 보기 readmore