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;
}
}
selenium 获取table数据的更多相关文章
- selenium获取缓存数据
爬虫呢有时候数据方便有时候登入获得cookies,以及获取他存缓存中的数据 一.获取缓存中的数据其实很简单js注入就好了 localStorage_1 = driver.execute_script( ...
- LayUI之table数据表格获取行、行高亮等相关操作
前言 目前LayUI数据表格既美观有不乏一些实用功能.基本上表格应有的操作已经具备,LayUI作者[贤心]肯定是煞费苦心去优化,此处致敬.但是实话实话,如果单纯那数据表格功能来说,EasUI的数据表格 ...
- [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息
本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...
- bootstrap table通过ajax获取后台数据展示在table
1. 背景 bootstrap table 默认向后台发送语法的dataType为 json,但是为了解决跨域问题我们需要将dataType改为jsonp,这时就需要修改bootstrap table ...
- Helium文档9-WebUI自动化-find_all获取页面table数据
前言 find_all关键字根据官方介绍的作用是查找所有出现GUI元素,并且返回list,下面通过举例说明 入参介绍 def find_all(predicate): ""&quo ...
- python3+selenium获取列表某一列的值
python3+selenium获取列表某一列的值 我们在坐自动化测试时,我们可能不想单纯的想验证一个选项卡,我们让脚本随机选择一个选项进行接下来的操作.例如我们想获取列表某一列的某一个数据(随机的) ...
- 用ajax获取后台数据,返回json数据,怎么在前台使用?
用ajax获取后台数据,返回json数据,怎么在前台使用呢?后台 C# code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 if (dataType == &qu ...
- solr与.net系列课程(四)solr查询参数的讲解与.net如何获取solr数据
solr与.net系列课程(四)solr查询参数的讲解与.net如何获取solr数据 上一节我们完成了solr连接数据库,细心的朋友会发现一个问题,就是solr其实和语言没有任何关系,配置完成后任何语 ...
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
随机推荐
- Codeforces 1315A Dead Pixel (水题)
Screen resolution of Polycarp's monitor is a×ba×b pixels. Unfortunately, there is one dead pixel at ...
- 多种方式实现平均分栏布局(有间距)div平分行宽
以下例子基于分四栏+栏间有间距的例子分析 效果图: html代码: <div class="buy-one-buy"> <h3>淘一淘</h3> ...
- Unity 鼠标旋转物体360展示
PC端 using UnityEngine; using System.Collections; public class DragRound : MonoBehaviour { public Tra ...
- RocketMQ-0.1
rocketmq的主要部分是由4种集群构成的:namesrv集群.broker集群.producer集群和consumer集群. namesrv集群:也就是注册中心,rocketmq在注册中心这块没有 ...
- 前端一面/面试常考题1-页面布局:假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应。
题目:假设高度已知,请写出三栏布局,其中左栏.右栏宽度各为300px,中间自适应. [题外话:日常宣读我的目标===想要成为一名优雅的程序媛] 一.分析 1. 题目真的像我们想得这么简单吗? 其实不然 ...
- Apache和Nginx配置默认访问index.php
Apache: .htaccess文件配置 Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d R ...
- C:字符数组 与 字符串
字符串与字符数组 C语言中没有字符串这种数据类型,可以通过char的数组来替代: 字符串一定是一个char的数组,但char的数组未必是字符串: 数字0(和字符'\0'等价)结尾的char数组就是一个 ...
- Jmeter_接口串联自动化测试_登录后充值获取cookie
1.登陆->充值->运行会报错 2,那如何解决这个问题呢,添加HTTP COokie管理器 另外一种方法,登录->提取正则表达式,充值->添加HTTP cookie管理器
- 7,请描述下cookies,sessionStorage和localStorage的区别
7,请描述下cookies,sessionStorage和localStorage的区别 首先,cookie是网站为了标识用户身份而储存在用户本地终端(client side,百科: 本地终端指与计算 ...
- Educational Codeforces Round 77 (Rated for Div. 2)D(二分+贪心)
这题二分下界是0,所以二分写法和以往略有不同,注意考虑所有区间,并且不要死循环... #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> ...