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语句的想法,以便于后续调优. 一. ...
随机推荐
- C++类的组合例子
Line类调用Point类的两个对象p1,p2作为其数据成员,计算线段长度 组合类构造函数定义的一般形式为: 类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表)... {类的初始化} ...
- MySQL-exists和in的区别
SQL查询中in和exists的区别分析 对于一些不可不免的查询场景,我们难免要用到子查询 那么in和exists那个的效率更高一点呢 SQL查询中in和exists的区别分析 select * fr ...
- JAVA的DES加密解密在windows上测试一切正常,在linux上异常
windows上加解密正常,linux上加密正常,解密时发生 如下异常,异常信息如下: [ERROR] 2018-10-15 09:30:35,998 method:com.iscas.ippc.co ...
- axublogcms1.1.0 Getshell
axublogcms1.1.0 Getshell 代码执行漏洞 现在最新版是1.1.0 今天重新审计了下 axublogcms1.0.6 ,发现一处计较鸡肋的漏洞,因为并不是只有1.0.6版本存在 ...
- 生成3位的序列号_仅仅CASE WHEN的简单应用
PNo, , ) AS sn INTO #temp1 FROM tbl_test SELECT ), sn) ), sn) ), sn) END AS sn, PNo FROM #temp1
- nmcli配置ipv6
nmcli配置ipv6 作者:Eric 微信:loveoracle11g [root@racooler ~]# nmcli connection show eno16777736 | grep ipv ...
- Django基础模板层(75-76)
Django框架之模板层(d75)一 模版语法之变量: ** locals() 会把*该*视图函数内的变量,传到模板 ** return render(request, 'index.html' ...
- 逆向工程vgenerator(三)
前言 该项目的最后一篇博文,最终构建,写入文件,整体项目流程将在本片文章中写出. jdbcType /** *@author vvxtoys *mysql单位 -> jdbcType */ pa ...
- 【HDFS API编程】删除文件
所有操作都是以fileSystem为入口进行,我们使用fileSystem下的delete方法进行删除文件操作,删除的时候必须慎重. 直接上代码: /** * 删除文件 * @throws Excep ...
- Linux命令、脚本
1.传文件 FTP/SFTP:ftp 用户名@远程ip SCP:注意ip后有个 : 本地文件发到远程 scp 本地文件 用户名@远程ip:远程路径 远程文件发到本地 scp 用户名@远程ip: ...