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数据,将前台传来 ...
随机推荐
- Django中csrf_token验证原理
我多年没维护的博客园,有一篇初学Django时的笔记,记录了关于django-csrftoekn使用笔记,当时几乎是照抄官网的使用示例,后来工作全是用的flask.博客园也没有维护.直到我的博客收到了 ...
- Linux - XShell - alt 快捷键的设置
1. 概述 命令行的 alt 快捷键可能会冲突 2. 环境 os win10 centos7 xshell xhell6 3. 场景 开启 centos7 虚拟机 在 win10 打开 xshell6 ...
- Petr and a Combination Lock
Petr has just bought a new car. He's just arrived at the most known Petersburg's petrol station to r ...
- 设备驱动基础学习--/proc下增加节点
在需要创建一个由一系列数据顺序组合而成的/proc虚拟文件或一个较大的/proc虚拟文件时,推荐使用seq_file接口. 数据结构struct seq_fille定义在include/linux/s ...
- MYSQL内置函数【转】
一.MySQL 字符串函数 函数 描述 实例 ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码. 返回 CustomerName 字段第一个字母的 ASCII 码: SELECT AS ...
- pyqt5 通过QLinearGradient 绘制取色板
要绘制HSV取色板,一般通过绘制前景色和背景色的方式实现,先绘制前景,然后绘制背景,前景是HSV颜色空间,从左到右,背景是亮度,从上到下,xs和ys是鼠标的当前的位置. def graphicsVie ...
- AngularJS Learning Notes
AngularJS 简介 AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. AngularJS 通过 指令 扩展了 HTML ...
- VM虚拟机黑屏 鼠标进不去
#开始 可能是我脸黑吧 最近用虚拟机好几次都是黑屏 鼠标进不去 但是任务管理器显示确实有资源消耗 也就是说实际上应该是开机成功了(但是听不到声音 也许是没有开机吧) #解决方案 管理员权限打开 cmd ...
- Catalyst 6500/6000 Switches ARP or CAM Table
译:https://www.cisco.com/c/en/us/support/docs/switches/catalyst-6500-series-switches/71079-arp-cam-ta ...
- Python学习(六)—— 函数、全局变量与局部变量
函数 函数的定义 def test(x): "The function definition" x += 1 return x def:定义函数的关键字 test:函数名 ():内 ...