如何从Web上的边桌数据打印列标题与WebDriver优秀

问题下面的代码允许我打印列标题或将网页表格数据打印到CSV文件,具体取决于我是select“th”还是“td”标签,但不是同时select。

我的问题如何在CSV输出中同时打印csv'th'和'td'文本?

代码我已经尝试了我的代码的2个版本,但结果是相同的。所附的两个版本。

代码版本1

public class WebToCSV { static WebDriver driver = new FirefoxDriver(); public static void main(String[] args) throws Throwable { //driver.navigate().to("http://goo.gl/El1PIV"); driver.navigate().to("http://www.bloomberg.com/markets/stocks/futures"); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); WebElement table = driver.findElement(By.cssSelector ("div[class='data-tables first']")); List<WebElement> irow = table.findElements (By.cssSelector("div[class='data-tables first'] tr")); System.out.println("No. of rows in the table are: " + irow.size()); // Create excel workbook and sheet. FileOutputStream fos = new FileOutputStream ("/Users/HARSHENDU/Desktop/Selenium_Practice/Stats.csv"); XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet ws = wb.createSheet("WriteToXL"); for(int r=0; r<irow.size(); r++) { WebElement webRow = irow.get(r); System.out.println(webRow.getText()); XSSFRow row = ws.createRow(r); List<WebElement> allCells = webRow.findElements(By.tagName("td")); for(int c=0; c<allCells.size(); c++) { WebElement webCell = allCells.get(c); String text = webCell.getText(); XSSFCell excelCell = row.createCell(c); excelCell.setCellValue(text); } System.out.println(""); } fos.flush(); wb.write(fos); fos.close(); end(); } public static void end() { driver.close(); driver.quit(); } 

}

代码版本2这个版本有两组for循环,第一个是在csv中打印列标题,第二个是从webtable打印所有数据。

 public class StatsToxL { static WebDriver driver = new FirefoxDriver(); public static void main(String[] args) throws Throwable { //driver.navigate().to("http://goo.gl/El1PIV"); driver.navigate().to("http://www.bloomberg.com/markets/stocks/futures"); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); WebElement table = driver.findElement(By.cssSelector ("div[class='data-tables first']")); // Get webtable header column row. List<WebElement> irow2 = table.findElements (By.cssSelector("div[class='data-tables first'] thead tr ")); System.out.println("No. of rows in the header are: " + irow2.size()); // Get all webtable rows List<WebElement> irow = table.findElements (By.cssSelector("div[class='data-tables first'] tbody tr")); int iRowCount = irow.size(); System.out.println("No. of rows in the table are: " + iRowCount); // Create excel workbook and sheet. FileOutputStream fos = new FileOutputStream ("/Users/HARSHENDU/Desktop/Selenium_Practice/Stats.csv"); XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet ws = wb.createSheet("WriteToXL"); // Iterate over webtable header row and header cells. for(int r2=0; r2<irow2.size(); r2++) { WebElement webRow2 = irow2.get(r2); System.out.println(webRow2.getText()); XSSFRow row2 = ws.createRow(r2); List<WebElement> allCells2 = webRow2.findElements(By.tagName("th")); for(int c2=0; c2<allCells2.size(); c2++) { WebElement webCell = allCells2.get(c2); String text2 = webCell.getText(); XSSFCell excelCell2 = row2.createCell(c2); excelCell2.setCellValue(text2); } System.out.println(""); fos.flush(); wb.write(fos); } // Iterate over webtable rows and cells. for(int r=0; r<iRowCount; r++) { WebElement webRow = irow.get(r); System.out.println(webRow.getText()); XSSFRow row = ws.createRow(r); List<WebElement> allCells = webRow.findElements(By.tagName("td")); for(int c=0; c<allCells.size(); c++) { WebElement webCell = allCells.get(c); String text = webCell.getText(); XSSFCell excelCell = row.createCell(c); excelCell.setCellValue(text); } System.out.println(""); } fos.flush(); wb.write(fos); fos.close(); end(); } public static void end() { driver.close(); driver.quit(); } } 

更改

 webRow.findElements(By.tagName("td")) 

 webRow.findElements(By.xpath("//td | //th"))