2016-02-29 52 views
0

错误提示: 给定的选择器表[class ='stats_table data_grid'] tbody tr [0] td [0]无效或不会导致WebElement 。出现以下错误: InvalidSelectorError:无效或非法选择指定尝试将webtable导出为ex​​cel时出现无效的选择器错误

观察: 我已经检查了cssSelector没有[ “+ R +”]和[ “+ C +”],它是有效的。 所以这个错误来自添加[“+ r +”]和[“+ c +”],我无法缓解它。我的总体目标是从mlb.com/stats的webtable中获取数据,并将其输入Excel表格中。几乎99%的代码工作正常, 除了无效的cssSelector问题。

我的代码是:

package automate; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.List; 
import org.apache.poi.xssf.usermodel.XSSFCell; 
import org.apache.poi.xssf.usermodel.XSSFRow; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class MLBtoXL { 


    static WebDriver driver = new FirefoxDriver(); 

    public static void main(String[] args) throws IOException { 

     // Navigate to mlb.com/stats 
     driver.navigate().to("http://goo.gl/El1PIV"); 

     WebElement table = driver.findElement(By.cssSelector 
       ("table[class='stats_table data_grid']")); 

     List<WebElement> irow = table.findElements(By.tagName("tr")); 
     int iRowCount = irow.size(); 

     List<WebElement> icol = table.findElements(By.tagName("td")); 
     int iColCount = icol.size(); 

     FileOutputStream fos = new FileOutputStream 
       ("/Users/HARSHENDU/Desktop/MLBtoXL.xlsx"); 

     XSSFWorkbook wb = new XSSFWorkbook(); 
     XSSFSheet ws = wb.createSheet("Team Stats"); 

     for(int r=0; r<=iRowCount; r++) { 
      XSSFRow excelrow = ws.createRow(r); 
      for(int c=0; c<iColCount; c++) { 


// Invalid selector exception coming up for the following cssSelector. 
       WebElement cellval = driver.findElement 
(By.cssSelector("table[class='stats_table data_grid'] tbody tr ["+r+"] td ["+c+"]")); 
       String cellcontent = cellval.getText(); 
       XSSFCell excelcell = excelrow.createCell(c); 
       excelcell.setCellType(XSSFCell.CELL_TYPE_STRING); 
       excelcell.setCellValue(cellcontent); 
      } 
      System.out.println(""); 
     } 

    fos.flush(); 
    wb.write(fos); 
    fos.close(); 

     end(); 

    } 

    public static void end() { 
     driver.close(); 
     driver.quit(); 
    } 

} 
+0

你可以添加表格html吗? – Guy

+0

谢谢你帮我的人。这里是HTML – H1b1

+0

html太长了,无法粘贴到这里,我也没有看到将它作为一个文件附加。但它是从以下链接的HTML:http://goo.gl/El1PIV – H1b1

回答

1

我相信使用XPath能够解决您的问题:

WebElement cellval = driver.findElement(By.XPath("//table[@class='stats_table data_grid']/tbody/tr["+r+"]/td["+c+"]")); 
+0

嗨,本,谢谢你的想法,得到一个新的错误现在如下所示: 无法找到元素:{“method”:“xpath”,“selector”:“// table [@ class ='stats_table data_grid']/tbody/tr [1]/td [33] “} – H1b1

+0

所以现在它正在从索引1到33读取整个表格,但无法找到元素。非常令人费解。 – H1b1

+0

我在firepath中用eval按钮检查了xpath,它显示xpath是有效的 – H1b1

1

您需要添加index属性。尝试

WebElement cellval = driver.findElement(By.cssSelector("table[class='stats_table data_grid'] tbody tr[index="+r+"] td[index="+c+"]"); 
+0

谢谢您的回复,但错误仍然相同。现在它显示索引1为问题: 给定选择器表[class ='stats_table data_grid'] tbody tr [1] td [1]无效或不导致WebElement。出现以下错误: InvalidSelectorError:无效或非法选择指定 – H1b1

+0

这次,我做你所建议的,但使用的XPath,而不是cssSelector,我得到以下错误: 找不到元素:{“法” :“xpath”,“selector”:“// table [@ class ='stats_table data_grid']/tbody/tr [1]/td [33]”} 所以现在它读取所有从1到33的索引,你的想法奏效了,但仍然找不到要素。 – H1b1

+0

我用firepath中的eval按钮检查了xpath,它显示xpath有效 – H1b1