案例:本文主要描述如何根据快递单号使用Java+Selenium爬取”爱查快递网页“快递的跟踪信息并按照设计的数据格式返回数据
解决问题:爬取JavaScript返回的网页数据(网站为了保护自己的数据,没有把数据直接放在网页源代码中返回,而是采用异步的方式,用JS返回数据,无法直接抓取)
环境准备:Chrome浏览器、Chrome浏览器驱动文件(chromedriver.exe)
:chromedriver.exe下载地址:http://chromedriver.storage.googleapis.com/index.html

一、首先创建一个maven工程,配置依赖包

        <dependencies><!-- selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>2.44.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.41</version></dependency></dependencies>

二、开始写入自动化测试代码

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import com.alibaba.fastjson.JSON;public class Test {public static void main(String[] args) throws InterruptedException, IOException {//1.获取网页的浏览器driver//(1)定义urlString url="http://www.ickd.cn/minhang.html#no=CAE683160636";//(2)设置driver驱动chromedriver.exe(版本:2.39)路径System.setProperty("webdriver.chrome.driver", "D:\\chromedriver_win32\\2.39\\chromedriver.exe");//(3)设置chrome选项(取消浏览器弹窗)ChromeOptions options = new ChromeOptions();options.addArguments("--headless");options.addArguments("--disable-gpu");//(4)建立selenium 驱动WebDriver driver = new ChromeDriver(options);//WebDriver driver = new ChromeDriver();//(5)设置窗口最大化及网页等待时间driver.manage().window().maximize();  //窗口最大化driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//网页等待时间//(6)启动driver浏览网页driver.get(url);  //输入网址//2.设置等待时间Thread.sleep(3000);//等待3s//3.解析网页数据//(1)封装快递跟踪数据为map(time,context)Map dataMap = new HashMap<String,String>();for (int i=0;i<=8;i++){String time=driver.findElement(By.xpath("//*[@id=\"result\"]/table/tbody/tr["+(i+1)+"]/td[1]")).getText();String context=driver.findElement(By.xpath("//*[@id=\"content-index-"+i+"\"]")).getText();dataMap.put(time,context);}//(2)封装封装快递跟踪数据为list(map(time,context))List<Map> list = new ArrayList<Map>();list.add(dataMap);//(3)封装minhang全部数据为map(String,Object)Map minHangMap = new HashMap<String,Object>();minHangMap.put("mailNo","CAE683160636");minHangMap.put("expSpellName","minhang");minHangMap.put("expTextName","民航快递");minHangMap.put("data",dataMap);//4.关闭浏览器driver.close();//5.将封装的minhang数据map(String,Object)转化为json字符串返回System.out.println(JSON.toJSONString(minHangMap));}
}

三、运行结果

{"mailNo":"CAE683160636","expSpellName":"minhang","data":{"2020-10-14 05:34":"杭州分公司/机场营业部/派送出库/派送出库 交接单:HOTB140518-145677 派送员:卓善林 13968084230 运输装车:浙AR30M5","2020-10-12 20:08":"华北公司/亦庄营业部/取件入库/柜台交接 取件员: 取件时间:2020-10-12 19:00:00","2020-10-12 20:09":"华北公司/亦庄营业部/地面移库/地面移库 交接单:HOTB121955-576260 交接人:余子国 运输装车","2020-10-12 23:39":"华北公司/出港仓库/集运出库/集运出库主单号:999 目的港:杭州 货袋清单:HOTB122325-942630 交接人:姚座银 去向","2020-10-13 12:40":"华北公司/出港仓库/出港预报/主单号:999-98932341 航班号:CA1716 航班时间:2020-10-13 14:30:00","2020-10-14 04:59":"杭州分公司/机场营业部/开拆入库/开拆入库 交接单:HOTB122325-942630 发货城市:北京","2020-10-14 11:15":"杭州分公司/机场营业部/客户签收/移动终端 签收信息 签收人:章文军 签收时间:2020-10-14 11:15:31说明免费开通微商查快递系统"},"expTextName":"民航快递"}

Java+Selenium爬取JavaScript返回的网页数据相关推荐

  1. selenium爬取淘宝商品基础数据以及商品详情(茶叶数据)

    selenium爬取淘宝商品基础数据以及商品详情 目录 网页分析 确定要爬取的数据 分析网页构成 爬取流程 登入 爬取基础数据以及商品详情 爬取基础数据 爬取商品详情 淘宝滑动验证码 保存EXCEL中 ...

  2. 巧用selenium爬取巨潮资讯公司数据

    巧用selenium爬取巨潮资讯公司数据 立项背景:在做深度学习的过程中利用python进行建模,需要数据来训练模型. 项目目标:通过运用python的selenium模块,爬取巨潮资讯网站关于公司的 ...

  3. python selenium 爬取去哪儿网的数据

    python selenium 爬取去哪儿网的数据 完整代码下载:https://github.com/tanjunchen/SpiderProject/tree/master/selenium+qu ...

  4. Python爬虫实战:selenium爬取电商平台商品数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客挖掘机 PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  5. python爬取js_Python爬取javascript(js)动态网页

    python有许多库可以让我们很方便地编写网络爬虫,爬取某些页面,获得有价值的信息!但许多时候,爬虫取到的页面仅仅是一个静态的页面,即网页 的源代码,就像在浏览器上的"查看网页源代码&quo ...

  6. 基于Java + selenium 爬取某网站千张图片

    预览(可以根据循环次数爬取大量图片) 一.网页分析 1 点击F12进入检查,将小箭头移到网页中随便一张图片上 2 进一步我们可以发现每一张图片的链接都包含在<ul>标签的子标签<li ...

  7. java+selenium爬取知网数据

    使用selenium工具爬取知网相关数据,思路:根据几个关键词搜索出相关的内容,然后爬取列表中所有论文的访问链接. 注意:直接爬取的链接是不能用的,需要自己拼接一下.具体看代码.新手,代码写的有点乱. ...

  8. Java selenium 爬取 星图

    导入包: <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-firefox-driver --&g ...

  9. 照葫芦画瓢之python爬虫系列----(2)初次爬取简单的动态网页数据(网易、QQ音乐排行榜)

    感谢提供素材的同学,无论好坏,高低,我都真心佩服你:参考文章地址:https://mp.weixin.qq.com/s/AXr8BjR_tU-E9YBo-mLVlg 爬取网易云音乐榜单 在上一篇的文章 ...

最新文章

  1. 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3
  2. leetcode算法题--数组中数字出现的次数
  3. nginx反向代理、负载均衡以及分布式下的session保持
  4. linux字符设备文件的打开操作,Linux字符设备驱动模型之字符设备初始化
  5. PHP框架 Phalcon 1.0.0 beta发布,实测性能强劲
  6. mysql查询子表的语句_MySQL基本SQL语句之单表查询、多表查询和子查询
  7. 前端:background背景图
  8. ubuntu16.04下安装opencv3.2版本
  9. mysql windows 安装 错误
  10. python编写年金终值函数_看零件图的标题栏可了解()
  11. application terminated怎么解决_优雅解决 SpringBoot 工程中多环境下 application.properties 的维护问题...
  12. cin判断读取结束 C++语言
  13. verilog 按键消抖
  14. centos7.5安装
  15. Hypervisor技术
  16. android 电子签名设备,[Android]实现电子签名并截屏
  17. Python爬取全网文字并词云分析(全程一键化!)
  18. setuptools-scm was unable to detect version for‘…/…/某git包‘
  19. 基因数据处理98之SparkBWA运行时spark on Yarn问题日志完整记录
  20. vue 浏览器调试 样式如何定位样式_Vue项目骨架屏注入实践和方法总结

热门文章

  1. 视频抓图(有硬编码解码)一获得解码后数据
  2. “秀才造反,十年不成”是什么意思? - 已解决 - 搜搜问问
  3. 2016百度之星 - 测试赛(热身,陈题)-列变位法解密(模拟)
  4. 基于图像的虚拟换装:Towards Photo-Realistic Virtual Try-On by Adaptively Generating-Preserving Image Content
  5. Windows常用快捷键,及控制台cmd的常用命令
  6. python小程序抢购脚本怎么写_实战|抢购脚本编写
  7. 【51单片机实验】4-单片机定时/计数器的应用(附Proteus电路)
  8. 稳定可靠github加速神器 FastGithub
  9. 武汉工商简单校园导游系统
  10. Oracle数据库之审计(五)