Selenium 实现nvsm查询和输出ksql语句
测试环境:http://nvsm.cnki.net/kns/brief/result.aspx?dbprefix=SCDB
程序功能:对各个文献库的高级检索功能,输入检索条件做检索,提取加密的ksqlvalue,通过工具对ksqlvalue解密生成ksql语句,输出的文本文件
package test.selenium; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select; public class NvsmTest { public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub List<String> dbprefixs = new ArrayList(); //库名存的集合里
dbprefixs.add("CJFQ"); //期刊
dbprefixs.add("CDMD"); //博硕
dbprefixs.add("CYFD"); //年鉴
dbprefixs.add("CCND"); //报纸
dbprefixs.add("CIPD"); //会议
// dbprefixs.add("WWBD"); //图书 getKsqlValue(dbprefixs); //取ksqlvalue值写文件
jiemd5(); //对ksqlvalue值解密
} public static void getKsqlValue(List<String> dbprefixs) throws Exception
{
String path01 = "C:\\selenium_ksqlmd5.txt"; //ksqlvalue值写文件
FileOutputStream fos = new FileOutputStream(path01);
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw); for(String dbprefix:dbprefixs) //遍历集合中的库名
{
WebDriver driver = new FirefoxDriver();
String path = "http://nvsm.cnki.net/kns/brief/result.aspx?dbprefix="+dbprefix;
System.out.println(path);
driver.get(path);
driver.manage().window().maximize(); WebElement weselect01 = driver.findElement(By.xpath("//*[@id=\"txt_1_sel\"]")); //检索条件第一个下拉框
Select s01 = new Select(weselect01);
WebElement weselect02 = driver.findElement(By.xpath("//*[@id=\"txt_2_sel\"]")); //检索条件第二个下拉框
Select s02 = new Select(weselect02); List<WebElement> selectlist01 = s01.getOptions(); //检索条件第一个下拉框的元素集合
List<WebElement> selectlist02 = s02.getOptions(); //检索条件第二个下拉框的元素集合 int num = selectlist01.size();
int random01 = new Random().nextInt(num); //检索条件第一个下拉框元素随机取值
int random02 = new Random().nextInt(num); //检索条件第二个下拉框元素随机取值
s01.selectByIndex(random01);
s02.selectByIndex(random02); driver.findElement(By.xpath("//*[@id=\"txt_1_value1\"]")).sendKeys("综述"); //检索条件第一个文本框
driver.findElement(By.xpath("//*[@id=\"txt_2_value1\"]")).sendKeys("经济"); //检索条件第二个文本框
Thread.sleep();
WebElement btn = driver.findElement(By.xpath("//input[@id=\"btnSearch\"]")); //检索按钮
btn.click();
Thread.sleep();
WebElement iframe = driver.findElement(By.xpath("//iframe[@id=\"iframeResult\"]")); //定位检索结果的frame
System.out.println(iframe.getAttribute("id")); //输入frame的id
driver.switchTo().frame(iframe); //切换frame
WebElement ksql = driver.findElement(By.xpath(".//*[@id='SqlValue']")); //定位sqlvalue元素 String ksqlvalue = ksql.getAttribute("value"); //取SqlValue元素值 bw.write(ksqlvalue); //SqlValue值写文件
bw.newLine();
bw.flush();
driver.quit();
}
bw.close();
} public static void jiemd5()
{
WebDriver driver = new FirefoxDriver();
String tools = "http://192.168.107.188/dec/t.aspx";
driver.get(tools);
driver.manage().window().maximize(); String frompath = "C:\\selenium_ksqlmd5.txt"; //读文件
String topath = "C:\\selenium_ksql.txt"; //写文件 FileInputStream fis;
FileOutputStream fos;
try {
fis = new FileInputStream(frompath);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr); fos = new FileOutputStream(topath);
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw); String tmp;
while((tmp = br.readLine())!=null)
{
WebElement text = driver.findElement(By.xpath("//textarea[@id=\"TextBox2\"]"));
System.out.println(text.getAttribute("id"));
WebElement btn = driver.findElement(By.xpath("//input[@id=\"Button2\"]")); text.clear();
text.sendKeys(tmp);
btn.click();
String ksql = driver.findElement(By.xpath("//*[@id=\"md5jie\"]")).getText();
System.out.println(ksql);
Thread.sleep(); bw.write(ksql);
bw.newLine();
bw.flush();
}
bw.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Selenium 实现nvsm查询和输出ksql语句的更多相关文章
- yii2输出sql语句
yii2如何输出具体的查询的sql语句: $query = User::find() ->where(['id'=>[1,2,3,4]) ->select(['username']) ...
- Oracle定时查询结果输出到指定的log文件
最近有个监控项目需要采集数据库信息,原来方案是写个sql脚本,每个脚本放一个查询语句然后通过操作系统层su到oracle用户通过sqlpus执行这个.sql,然后加到crontab定时执行.但是这个问 ...
- 如何查找MySQL中查询慢的SQL语句
如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...
- 将mysql的查询结果输出到文件
在sql命令中我们可以查询到前数行的表,同时也可以将查询结果输出到txt文档 语句:select * from tablename into outfile 'filename.txt'; 例如:se ...
- MYSQL优化派生表(子查询)在From语句中的
Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化.这一举措提高了性能 ...
- 如何查找MySQL中查询慢的SQL语句(转载)
转载自https://www.cnblogs.com/qmfsun/p/4844472.html 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那 ...
- Mariadb/MySQL数据库单表查询基本操作及DML语句
Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...
- IBatis.net 输出SQL语句(七)
一.IBatis.net输出SQL语句到控制台 输出IBatis.net生成的SQL语句到控制台,能够方便调试. 如果要想输出IBatis.net的SQL语句到控制台,那么只需要做如下配置即可: &l ...
- NHibernate输出SQL语句
用了NHierbate之后,很少需要写原生的SQL语句,由于总是看不到SQL语句,所以有时候对SQL调优非常不利.因此产生了让NHibernate输出它所生成的SQL语句的想法,以便于后续调优. 一. ...
随机推荐
- python之路——17
王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 复习 1.迭代器2.生成器3.内置函数 1.学习55个 2.带key的,max min filter map ...
- 序列化模块_pickle
序列化: 把不能够直接存储的数据变成字节流(bytes)保存在文件, 进行持久化存储 反序列化: 任何数据都可以转成字节流(bytes)进行存储: 1. dumps 把任意对象序列化 li = [1, ...
- 记录1-更换mac pro内存,硬盘及恢复系统
我的mac pro是2012年初买的,4G/500G HDD在服役了六年多后速度堪比老牛,以前装的虚拟机压根不敢打开.这几天把内存更换为8G,硬盘升级为samsung的1T SSD,感觉像起死回生一样 ...
- NLTK——常用函数
1.Functions Defined for NLTK's Frequency Distributions Example Description fdist = FreqDist(samples) ...
- 从零开始学习python:demo2.3
字符串拼接+: first="hello" #将hello赋值给变量firstsecond="world" #将world赋值给变量secondfull=fir ...
- Oracle表空间不足;查询表空间使用率(unable to extend lob segment SYS_LOB0000076749C00006$$ by 8192 in tablespace USERS)
查询表空间对应地址 *),) total_space from dba_data_files order by tablespace_name; //方案一:修改表空间大小(32000可改为想要的数值 ...
- Splunk 丰富数据方法
方法1: 查找 Step 1.创建CSV文件,首字段为索引字段(关联字段) 2.导入CSV文件,Settings, Lookups, Lookup tables files 3.配置Lookup de ...
- ucos之互斥信号量及优先级反转
在ucos常使用共享资源来作为任务之间的通信方式,其中有:消息队列,信号量,邮箱,事件.信号量中又分二值信号,多值信号,互斥信号.这次主要讲二值信号与互斥信号之间区别和使用. 首先了解一下ucos的任 ...
- django settings多环境配置
通常我们会把本地.线上的配置拆分,django不同环境的配置可如下: 1.在settings.py同级目录添加settings文件夹 2.把settings.py移到settings文件夹内,并重命名 ...
- jeecg-boot 简易部署方案
jeecg-boot采用前后端分离的方案,前后端代码不在一起.想要部署 一般是通过反向代理实现. jeecg-boot目前支持更好更简单的解决方案: jeecg 在配置文件里面指定了 webapp的存 ...