首页 > 代码库 > selenium 获取table数据

selenium 获取table数据

public class Table {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        WebDriver driver = ExplorerBase.IESetting();        String url = "http://zs.njust.edu.cn/newzs/news/zhxw/20140710151805.htm";        driver.manage().window().maximize();// 最大化        driver.get(url);        String setscroll = "document.documentElement.scrollTop=300";        JavascriptExecutor jse = (JavascriptExecutor) driver;        jse.executeScript(setscroll);        Table table = new Table(driver);        //根据By获取table数据        By by = By.xpath(".//*[@id=‘count2‘]/table[1]/tbody/tr[5]/td/div/table");        System.out.println(table.getCellText(by, "1.1"));//行列都从1开始,更符合用户习惯                //根据xpath获取table数据        String  xpath=".//*[@id=‘count2‘]/table[1]/tbody/tr[5]/td/div/table";//table对应的xpath        String[][] arr=table.getTableData(xpath,2);        System.out.println(arr[1][1]);//行列都从1开始,更符合用户习惯        driver.quit();    }    private WebDriver driver;    Table(WebDriver driver) {        this.driver = driver;    }    /**     * 从一个table的单元格中得到文本值. 参数tableCellAddress的格式为 row.column, 行列从0开始.     *      * @param by     *            用于得到table对象     * @param tableCellAddress     *            一个单元格地址, 如. "1.4"     * @return 从一个table的单元格中得到文本值     */    public String getCellText(By by, String tableCellAddress) {        // 得到table元素对象        WebElement table = driver.findElement(by);        // 对所要查找的单元格位置字符串进行分解,得到其对应行、列。        int index = tableCellAddress.trim().indexOf(‘.‘);        int row = Integer.parseInt(tableCellAddress.substring(0, index));        int cell = Integer.parseInt(tableCellAddress.substring(index + 1));        // 得到table表中所有行对象,并得到所要查询的行对象。        List<WebElement> rows = table.findElements(By.tagName("tr"));                WebElement theRow = rows.get(row-1);//获取指定单行, 对出传入的行列都做-1        // 调用getCell方法得到对应的列对象,然后得到要查询的文本。        String text = getCell(theRow, cell-1).getText();        return text;    }/** * 获取指定x,y值 * @param Row行 * @param cell列 * @return 返回指定单元格的元素 */    private WebElement getCell(WebElement Row, int cell) {        List<WebElement> cells;        WebElement target = null;        // 列里面有"<th>"、"<td>"两种标签,所以分开处理。        if (Row.findElements(By.tagName("th")).size() > 0) {                    cells = Row.findElements(By.tagName("th"));            target = cells.get(cell);        }        if (Row.findElements(By.tagName("td")).size() > 0) {            cells = Row.findElements(By.tagName("td"));            target = cells.get(cell);        }        return target;    }    /**     * 获取table数据     * @param xpath table对应的xpath     * @param maxColRow 列最多的一行的行数     * @return 以二维数组的形式返回table数据     */    public String[][] getTableData(String xpath,int maxColRow) {        WebElement table=driver.findElement(By.xpath(xpath));        List<WebElement> rows = table.findElements(By.tagName("tr"));//获取行tr的集合        int rowCount=rows.size();        List<WebElement> cols = driver.findElement(By.xpath(xpath+"/tbody/tr["+maxColRow+"]")).findElements(By.tagName("td"));//获取列td的集合        int colCount=cols.size();        //System.out.println("行数:"+rowCount+"列数:"+colCount);        String[][] arr=new String[rowCount][colCount];        String txt;        for (int i = 1; i < rowCount; i++) {            for (int j = 1; j < colCount; j++) {                try {                    txt= driver.findElement( By.xpath(xpath+"/tbody/tr["+(i)+"]/td["+(j)+"]")).getText();                } catch (Exception e) {                    txt="";                }                        txt=txt.replace("\n", "");                txt=txt.replace("\r", "");                    //System.out.println("行数:"+i+"    列数:"+j);                arr[i-1][j-1]=txt;            }        }        return arr;    }}