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数据,将前台传来 ...
随机推荐
- Git - 04. git 缓存
1. 概述 简单描述, 已经被 暂存 过的文件的 操作 和 生命周期 在 缓存区 中的声明周期 暂时只与 缓存区 做交互 2. 文件生命周期 略 这个之前讲过 3. 命令 1. stage 文件 概述 ...
- 2019冬季PAT甲级第一题
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ][]; ][]; ]; string ...
- MySQL删除语句比较,清空表数据,重置自增长索引
drop truncate delete 程度从强到弱 1.drop table tbdrop将表格直接删除,没有办法找回 2.truncate (table) tbtruncate 删除表中的所有数 ...
- MySQL数学函数简明总结
1. ABS(x): 返回x的绝对值 mysql> select ABS(1), ABS(-1), ABS(0); +--------+---------+--------+| ABS(1) | ...
- python GIL锁与多cpu
多核CPU linux : cat /proc/cpuinfo 如果你不幸拥有一个多核CPU,你肯定在想,多核应该可以同时执行多个线程. 如果写一个死循环的话,会出现什么情况呢? 打开Mac OS ...
- Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之ResponseProcessor(ACK接收)
该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 紧接着上一篇文章: Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之D ...
- 理解Javascript的原型和原型链
前言 本文2088字,阅读大约需要13分钟. 总括: 结合实例阐述了原型和原型链的概念并总结了几种创建对象的方法,扩展原型链的方法. 参考文章:The Secret Life of Objects,继 ...
- PAT 1015 Reversible Primes (判断素数)
A reversible prime in any number system is a prime whose "reverse" in that number system i ...
- 201771010135 杨蓉庆AND张燕 《面对对象程序设计(java)》第十一周学习总结
1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: (2) 了解java集合框架体系组成: (3) 掌握ArrayList.LinkList两个类的用 ...
- 数据表设计:多对多关系E-R图转换——中间表
链接:https://blog.csdn.net/vainfanfan/article/details/80568784 链接2:https://www.cnblogs.com/hiwangzi/p/ ...