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语句的想法,以便于后续调优. 一. ...
随机推荐
- spring @Configuration的使用
参考博客:https://www.cnblogs.com/duanxz/p/7493276.html spring中的@Scope注解 https://www.cnblogs.com/loneclo ...
- Windows 上安装 MySQL(8.0.11)
1.接下来我们需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 C:\web\mysql-8.0.11 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息: [m ...
- udev磁盘绑定
udev磁盘绑定 [grid@db-rac02 ~]$ cat 99-asm-multipath.rules KERNEL=="sd*",SUBSYSTEM=="bloc ...
- 05-Eclispe配置Tomcat插件
此插件只针对 eclipse-java-indigo-SR2-win32 这个开发工具使用的 1.下载tomcat插件 2.解压到指定位置 3.找到eclispe安装目录 D:\software\ec ...
- Redis集群搭建-韩国庆
认真一步一步搭建下来,就可以成功.... Redis-cluster集群架构讲解 redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之 ...
- java集合树状结构及源码
java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...
- 使用python函数持续监控电脑cpu使用率、内存、c盘使用率等
方法一: # import time 导入time模块 # import psutil 导入psutil模块 # def func(): # while True: ------->持续监控得w ...
- js实现输入某串数字,构建完全二叉树,并判断是否为二叉搜索树
思路:若为二叉搜索树,则中序遍历为递增的 let arr = [15,8,16,6,10];let pindex = [];function Node(){ this.root = null; thi ...
- C博客01——分支,顺序结构
C博客01--分支,顺序结构 1. 本章学习总结 1.1 思维导图 请以思维导图总结本周的学习内容. 1.2 本章学习体会及代码量体会 1.2.1 学习体会 对于C语言课程的理解,我有点吃力,不是说老 ...
- 通过阿里云ECS服务器公网ip访问tomcat,nginx
一.概述 1.操作系统:centos7 2.安装nginx方法:https://www.cnblogs.com/boonya/p/7907999.html,亲测可用. 3.tomcat版本:apach ...