다음을 사용하여 동적 웹 테이블 처리 Selenium 웹드라이버
웹 테이블 Selenium
웹에는 두 가지 유형의 HTML 테이블이 게시되어 있습니다.
- 정적 테이블: 데이터는 정적입니다. 즉, 행과 열의 수가 고정되어 있습니다.
- 동적 테이블: 데이터는 동적입니다. 즉, 행과 열의 수가 고정되어 있지 않습니다.
동적 테이블을 처리하는 방법 Selenium
다음은 동적 웹 테이블의 예입니다. Selenium 판매용. 입력 날짜 필터에 따라 행 수가 변경됩니다. 따라서 본질적으로 역동적입니다.
정적 테이블을 처리하는 것은 쉽지만 동적 테이블을 처리하는 방법은 다음과 같습니다. Selenium 행과 열이 일정하지 않기 때문에 약간 어렵습니다.
X-Path를 사용하여 웹 테이블 요소 찾기
웹 요소를 찾기 전에 먼저 이해해 보겠습니다.
웹 요소란 무엇입니까?
웹 요소는 텍스트 상자, 드롭다운 라디오 버튼, 제출 버튼 등과 같은 HTML 요소에 불과합니다. 이러한 HTML 요소는 다음과 같이 작성됩니다. 스타트 태그를 지정하고 다음으로 끝납니다. end 꼬리표.
예를 들어,
나의 첫 HTML 문서.
찾으려는 웹 요소의 X-경로를 가져오는 단계입니다.
단계 1) Chrome에서는 다음으로 이동하세요. https://demo.guru99.com/test/web-table-element.php
단계 2) x-path를 가져올 웹 요소를 마우스 오른쪽 버튼으로 클릭합니다. 우리의 경우, "회사"를 마우스 오른쪽 버튼으로 클릭하고 검사 옵션을 선택합니다. 다음 화면이 표시됩니다.
단계 3) 강조 표시된 웹 요소를 마우스 오른쪽 버튼으로 클릭하고 복사 -> x 경로 복사 옵션을 선택합니다.
단계 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 경로