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语句的想法,以便于后续调优. 一. ...
随机推荐
- scrapyd和scrapyd-client使用教程
原文地址:http://blog.wiseturtles.com/posts/scrapyd.html Tags scrapyd scrapy scrapyd-client By crazygit O ...
- 使用原生JDBC循环读取文件并持久化到数据库
先上代码: package com.demo.common.service; import java.io.File; import java.io.FileInputStream; import j ...
- windows下共享式服务开发
参考: https://blog.csdn.net/dongyewolong/article/details/8164873 https://blog.csdn.net/qwertyupoiuytr/ ...
- python(list、字典、元组、字符串方法、文件读写)草稿
1.list 定义list a = [] 添加元素 a.append('xx') #在list末尾添加 a.insert(0,'abc') #在指定某位置添加元素.指定的下标不存在就在末尾添加 ...
- FTP学习笔记
FTP有两个连接方式 1.控制连接 2.数据连接 控制链接 标准端口为21 用于数据传输中的控制 数据连接 标准端口20 用于数据传输中的上传 下载数据 数据传输的连接方式,主动连接 被动连接. ...
- C# xml 读xml、写xml、Xpath、Xml to Linq、xml添加节点 xml修改节点
#region XDocument //创建XDocument XDocument xdoc2 = new XDocument(); XElement xel1= new XElement(" ...
- 【转】【测试用例设计】WEB通用测试用例
易用性 1.便于使用.理解.并能减少用户发生错误选择的可能性 2.当数据字段过多时,使用便于用户迅速吸取信息的方式表现信息,突出重点信息,标红等方式 3.显示与当前操作相关的信息,给出操作提示. 4. ...
- jinja2 把文本变成html
data 是传过去的值 过滤器 | {{data.name | safe}}
- 【学习】数据规整化:清理、转换、合并、重塑(续)【pandas】
@合并重叠数据 还有一种数据组合问题不能用简单的合并或连接运算来处理.比如说,你可能有索引全部或部分重叠的两个数据集 使用numpy的where函数,它用于表达一种矢量化的if - else a = ...
- python模块 os&sys&subprocess&hashlib模块
os模块 # os模块可根据带不带path分为两类 # 不带path print(os.getcwd()) # 得到当前工作目录 print(os.name) # 指定你正在使用的操作系统,windo ...