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语句的想法,以便于后续调优. 一. ...
随机推荐
- 自定义页面微信、微博、QQ分享效果
几行简单的分享代码既可以实现,先看下效果: 第一步:页面因为结构代码 <div id="freebtn"> <ul> <li class=" ...
- Quartus Linux usbblaster
In path: /etc/udev/rules.d adding file: 51-usbblaster.rules $ pwd/etc/udev/rules.d$ ls -lZ 51-usbbla ...
- TensorFlow代码初识
直接看代码 import tensorflow as tf # tf.Variable生成的变量,每次迭代都会变化, # 这个变量也就是我们要去计算的结果,所以说你要计算什么,你是不是就把什么定义为V ...
- 自定义项目启动初始化信息的listener报错
自定义初始化组件代码如下: @Component public class InitComponent implements ServletContextListener, ApplicationCo ...
- Java垃圾回收(整理)
Java垃圾回收 Garbage Collection:GC: 什么样的对象才是垃圾?怎样判断一个对象引用是不是垃圾? 垃圾回收算法:Mark-Sweep(标记-清除)算法,Copying(复制)算法 ...
- iOS应用图标AppIcon
应用图标需求:(像素px) 29pt: 58*58 ( @2x ) 87*87 ( @3x ) 40pt: 120*120 ( @2x ) 180*180 ( @3x ) 60pt ...
- Java高级框架------Spring(二)
五.如何给Bean的属性赋值(注入) 1. 通过构造方法来赋值 2. 设置注入(通过set方法) 2.1 如果属性是基本类型或String等简单 <bean id="peo" ...
- C 语言实现基于 Linux 的端口扫描程序
Socket 常用函数: ⑴int socket(int protofamily, int type, int protocol); protofamily:即协议域,又称为协议族(family).常 ...
- MQTT项目请求设置
MQTT项目请求设置:XMLHttpRequest WithCredentials 1.如果在发送来自其他域的XMLHttpRquest请求之前,未设置withCredentiaals为true,那么 ...
- redis--解析字符串
# coding=utf-8import codecs if __name__ == '__main__': cmdlist = ("Decode") while True: cm ...