因其项目较特殊,无法使用httpclient来获取数据,但需求必须实现,所以采用了两种方法来获取数据,前提是有固定的账号和密码能够登陆网站

一、使用selenium工具

  1. 先设置maven依赖
    因其项目只支持IE8,在进行多次测试后,版本选择2.13
    使用前需下载对应的驱动 driver.exe
 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>2.50.0</version></dependency>
public void seleniumOpWx(String xdts,String sgrq,String keyWords) throws InterruptedException, ParseException{   Date date = DateUtils.parseDate(sgrq);//登录System.setProperty("webdriver.ie.driver", "D:\\IEDriverServer.exe");WebDriver driver = new InternetExplorerDriver();driver.get("http://x.x.x.x:xxxx/login.jsp");WebDriverWait waitLogin = new WebDriverWait(driver, 30);//显示等待-当此元素可被点击时再执行接下来的代码,以此判断是否登录成功waitLogin.until(ExpectedConditions.elementToBeClickable(By.id("username")));//操作登录WebElement j_username = driver.findElement(By.id("username"));WebElement j_password = driver.findElement(By.id("password"));WebElement secure = driver.findElement(By.id("secure"));username.sendKeys("admin");password.sendKeys("admin");WebElement submit = driver.findElement(By.id("pub"));submit.click();//登录后跳转到指定页面操作查询获取数据,其页面未分页driver.get("http://x.x.x.x:xxxx/h.jsp");String[] dateArr = sgrq.split("-");String sgrqDate = dateArr[0]+dateArr[1]+dateArr[2];String[] xdtArr = xdts.split(",");for (String xdt : xdtArr) {WebElement info = driver.findElement(By.xpath("//td[@title='"+xdt+"']"));//显示等待页面加载完成WebDriverWait wait = new WebDriverWait(driver, 120);wait.until(ExpectedConditions.elementToBeClickable(info));info.click();try {driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);String dy_str = driver.findElement(By.xpath("//*[@id='gdbTitleText']/tbody/tr[1]/td[2]")).getText();if (dy_str.contains("没有")) {continue;}wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.className("style42")));//获取标题String dynum_str = driver.findElement(By.xpath("//*[@id='gdbTitleText']/tbody/tr[1]/td[2]")).getText();if (!dynum_str.contains("没有")) {              List<WebElement> tables = driver.findElements(By.id("gdbId"));if (tables.size()>0) {for (WebElement table : tables) {List<WebElement> rows = table.findElements(By.className("style42"));for(int i=0 ; i<rows.size();i++) {List<WebElement> coList = rows.get(i).findElements(By.tagName("td"));if (coList.get(5).getText().contains((StringUtils.isEmpty(keyWords)?"hh":keyWords))) {//此处将获取的数据进行存储}}}}}} catch (Exception e) {continue;}}      driver.quit();}

二、使用htmlunit

测试挑选出适合的版本,配置依赖

  <dependency><groupId>net.sourceforge.htmlunit</groupId><artifactId>htmlunit</artifactId><version>2.13</version></dependency>
public void consInport(String xdts,String dateStr,String keyWords) throws FailingHttpStatusCodeException, IOException, ParseException {Date planDate = DateUtils.parseDate(dateStr);String[] xdtArr = xdts.split(",");StringBuilder dateBuilder = new StringBuilder();String[] dateArr = dateStr.split("-");dateBuilder.append(dateArr[0]).append("年").append(dateArr[1]).append("月").append(dateArr[2]).append("日");List<RepairPlanReview> repairPlanReviews = new ArrayList<RepairPlanReview>();WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8);webClient.getOptions().setJavaScriptEnabled(true);//支持jswebClient.getOptions().setCssEnabled(false);//支持CSS,一般CSS不需要webClient.setAjaxController(new NicelyResynchronizingAjaxController());//配置使用ajax,没有这一项调用网页接口会失败webClient.getOptions().setThrowExceptionOnScriptError(false);try {HtmlPage htmlPage = webClient.getPage("http://路径");//进入登录页面HtmlInput usernameInput = htmlPage.getHtmlElementById("username");//通过getHtmlElementById获取输入框HtmlInput pswInput = htmlPage.getHtmlElementById("password");// 往输入框 “填值”usernameInput.setValueAttribute("admin");pswInput.setValueAttribute("admin");// 获取登陆按钮HtmlInput btn = htmlPage.getHtmlElementById("btnenter");btn.click();//按下登陆按钮//模拟遍历点击并查询for (String xdt : xdtArr) {HtmlPage htmlPage2 = webClient.getPage("http://路径");HtmlInput date = htmlPage2.getHtmlElementById("query_plandate");date.setValueAttribute(dateBuilder.toString());HtmlSelect xdtSelect = htmlPage2.getElementByName("query_attempername");HtmlInput query = htmlPage2.getHtmlElementById("btnquery");//查询按钮HtmlOption xdtOption =xdtSelect.getOptionByValue(xdt);if (xdtOption != null) {htmlPage2 = xdtOption.click();htmlPage2 = query.click();//获取数据表格HtmlTable table = htmlPage2.getHtmlElementById("listTable");if (table!= null) {//获取每行数据List<HtmlTableRow> rows = table.getRows();if (rows.size()>=2) {//这里存储数据}}}}} catch (FailingHttpStatusCodeException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

不使用接口的方式获取数据(登录无验证码)相关推荐

  1. 接口的方式获取bing必应每天壁纸

    接口的方式获取bing必应每天壁纸 获取图片接口,返回json 请求接口 idx:起始位置 n:偏移量 http://www.bing.com/HPImageArchive.aspx?format=j ...

  2. 通过接口获取数据登录

    1,通过接口获取数据 我们通过接口获取数据需要配置本地开启代理 //vue.config.js const {defineConfig } = require('@vue/cli-service') ...

  3. vue中拿到接口,并获取数据,渲染到页面

    首先index.html完成的是单页面展示,app.vue里面已经写了视图出口, 例如;先新建一个role.vue页面,写上相应的布局和内容,然后在路由中添加这个页面. 然后开始写渲染数据的方法 前提 ...

  4. 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...

    2019独角兽企业重金招聘Python工程师标准>>> 一.基本用法 在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要 ...

  5. DataReader方式 获取数据

    /// /// 得到一个对象实体 DataReader方式 /// /// /// 成功返回对象模型,失败返回null public DotNet.Model.Base_Department GetM ...

  6. Android开发 亲测可用--多种方式获取手机短信验证码自动填入

    Android开发 静态注册.动态注册.短信中心库监控获取手机验证码,自动复制到剪切板或或填入输入框. 友情提醒初学者:这是广播接收器的类,写在xml中静态注册或写在启动类的Oncreate方法下动态 ...

  7. this指向、数据双向流、传递参数、JSX中循环、React中样式、路由、引入资源的其它方式、create-react-app脚手架、事件处理、获取数据、UI框架推荐、pc桌面应用electronjs

    改变this指向的几种方式: //1.使用箭头函数代替原始函数写法:getState=()=>{}//2.在函数调用时给函数名加bind(this)方法:(bind中第一个参数表示修改this指 ...

  8. 从企业钉钉的接口获取数据

    公司需要,搞了一下钉钉的接口. 首先说明我是帮使用钉钉软件的客户通过钉钉的接口获取数据,所以说我是有权限的.如果你是ISV,去看官方文档吧. 我暂时还不知道ISV开发人员是什么需求,但是至少对于钉钉来 ...

  9. 02_pandas获取数据(指定列获取、[]方式获取、loc函数,at函数, iloc函数 iat函数)

    获取数据 通过指定列的方式获取数据 选择单独一列,通过这种方式获取一个Series,等价于df.A import numpy as np import pandas as pd# 通过设置开始时间,并 ...

最新文章

  1. 丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!
  2. python下载网页里面所有的图片-python批量下载图片的三种方法
  3. FOSCommentBundle功能包:改变样式
  4. Unfair contest(个人做法)
  5. linux内核镜像sd卡,【原创】Linux QT镜像的制作--制作SD卡启动盘
  6. C++STL与泛型编程__侯捷视频_学习博客_总目录
  7. java引用类型_Java引用类型
  8. oracle索引未使用,oracle - 未使用主键索引 - SO中文参考 - www.soinside.com
  9. 格式化字符串长度 超出指定长度用....代替
  10. 人力资源管理系统、OA、行政管理系统、考勤管理、资产管理、车辆管理、绩效管理、员工管理、招聘、入职、离职、转正、加班、调休、企业OA系统、axure原型、rp源文件、web端后台管理原型、高保真原型
  11. flex4.5的DataGrid
  12. 利用SPSS做数据分析①(了解SPSS)
  13. Cisco Webex share screen 显示黑屏解决方法
  14. 转载一些Unity插件及资源
  15. Matlab2017b安装教程及破解失败方法
  16. 单片机常用外设驱动电路
  17. 在线抢购平台_项目预览
  18. 生信笔记:序列同源性、相似性
  19. 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)。Java实现
  20. 如何通过IP找到地址?

热门文章

  1. 阿里云OSS转移至七牛云存储(详细简洁教程)
  2. C++ 关键词过滤,屏蔽应用
  3. Python-mqtt:通过运行深入理解
  4. 扩散模型怎么生成的,sample怎么弄得,代码
  5. 记MFC俄罗斯方块制作过程
  6. Ubuntu卸载软件命令
  7. 牛客小白月赛6 - A鲲
  8. html 绘制甘特图,echarts绘制甘特图
  9. Python小白的数学建模课-12.非线性规划
  10. “三个成语”揭开瞻博网络的创新密码