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数据,将前台传来 ...
随机推荐
- lightoj 1408 概率dp
https://blog.csdn.net/moon_sky1999/article/details/98097470 博主在此,牛逼神犇 #include<bits/stdc++.h> ...
- vue使用axios访问后台接口
链接1:https://segmentfault.com/a/1190000012635783#item-2 // axios 使用post方式传递参数,后端接受不到,怎么解决 链接2:http ...
- Ansible - 配置文件
概述 再水一发 ref Ansible Configuration Settings 1. 查看 概述 查看 配置文件 的默认位置 命令 > ansible --version 结果 confi ...
- 压缩/批量压缩/合并js文件
写在前面 如果文件少的话,直接去网站转化一下就行. http://tool.oschina.net/jscompress?type=3 1.压缩单个js文件 cnpm install uglify-j ...
- 学会C#可以做什么
C#基于.NET Framework 和 .NET CORE平台 Client/Server 客户端/服务端 windows桌面应用程序 winform 2D WPF 3D Browser/Se ...
- blog主题——樱花
贮存一下,blog代码 QAQ 页脚html <!--live2d--> <script src="https://blog-static.cnblogs.com/file ...
- spark启动start-all.sh报错
报错信息如下: spark02: failed to launch: nice -n 0 /usr/local/softwareInstall/spark-2.1.1-bin-hadoop2.7/bi ...
- django view 视图控制之数据返回的视图函数
八.视图 view 概述:views.py定义的python函数,它接受Web请求并且返回Web响应. 有几个页面就有几个视图view user出入url地址,发送request--->urls ...
- [PHP]新版的mongodb扩展安装和使用
旧版的mongo扩展已经不推荐使用了,在php7以上一般是安装和使用新版的mongodb扩展 ubuntu下 apt-get install php-mongodb 例如下面的代码进行了查询和插入集合 ...
- Fluent_Python_Part1序幕,01-data-model, 数据模型
01-data-model/frenchdeck.py 1. Python解释器碰到特殊的句法时,会使用__特殊方法__去激活一些基本的对象操作. 特殊方法的存在是为了被解释器用的.没有my_obje ...