IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> JAVA使用selenium的常见爬虫操作 -> 正文阅读

[开发测试]JAVA使用selenium的常见爬虫操作

1、引入相关maven依赖

这里我的springboot的版本为2.2.0.RELEASE(这里使用springboot开发的,不是的话用main方法跑也一样的,springboot的话只是为了方便后期存数据到数据库)

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.8.1</version>
</dependency>

2、下载相关浏览器驱动这是介绍Chrome和Edge浏览器

chrome浏览器的下载地址:https://chromedriver.storage.googleapis.com/index.html
Edge的驱动下载地址为:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
在这里插入图片描述
!!!!!下载驱动之前检查自己浏览器的版本号为多少,下载对应版本的驱动,不然会导致程序无法调用浏览器

3、调用浏览器(以下代码均可以直接在你的main方法中直接运行)

//设置自己刚才下载的驱动程序的位置
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Administrator\\Desktop\\chromedriver.exe");
//创建一个驱动器对象
//也可以创建Edge的驱动对象,总之都是一个套路
//EdgeDriver edgeDriver = new EdgeDriver();//创建的edgedriver
ChromeDriver chromeDriver = new ChromeDriver();
//ChromeDriver对象可以获取到很多的信息,可以自行试一下
//浏览器访问某个地址
chromeDriver.get("www.baidu.com");

4、常见操作(后续我遇到之后也会继续更新)

4.1 获取网页元素的方法

//chromeDriver.findElement()为查询某个元素,当有多个时候只会返回第一个对象
//chromeDriver.findElements()方法可以查找元素列表
//以上两种方式都是从浏览器的根节点出发来找元素的
//获取到的WebElement对象都可以继续进行findElement()或者findElements()的操作,这个是从当前元素出发开始寻找WebElement对象
//参数有By.id(),By.tagName(),By.xpath()等,可以使用不同的方式来定位
WebElement body= chromeDriver.findElement(By.tagName("body"));//寻找html页面上的第一个body标签的元素
List<WebElement> divs = body.findElements(By.tagName("div"));//查找所有body标签下的div元素
//一般情况下可以通过以上这两种方法的组合获取到页面的任何一种元素

4.2 执行网页的js代码并取到js的返回值

//执行document.body.scrollHeight并将返回值拿到(获取body标签的高度)
Long totalHeight = (Long) chromeDriver.executeScript("return document.body.scrollHeight")
//有些操作在java里面操作特别麻烦,但是在js中操作可能就会简单很多,可以直接执行js的代码
//网页向下滚动
chromeDriver.executeScript("window.scrollTo(0,100)");//无需返回值的时候就不需要进行return

4.3 鼠标移动到某一元素,并点击(一些简单的模拟登录就会需要这个操作)

//先定位到登录按钮的元素
WebElement loginButton= chromeDriver.findElement(By.id("login_id"));
//鼠标移动到该元素上然后点击
Actions actions = new Actions(webDriver);//操作对象,里面有很多的鼠标、键盘动作可自行试一下
actions.moveToElement(loginButton).click().perform();

4.4 滚动页面,在解决滚动加载时是个好办法

//实际上也是来执行js代码进行滚动网页的
//获取到body的高度
//然后滚动到最下方
Long totalHeight = (Long) chromeDriver.executeScript("return document.body.scrollHeight");
chromeDriver.executeScript("window.scrollTo(0," + totalHeight + ")");

5、常见的坑!!!!!!

5.1 网页没有加载完获取元素时会失败

当元素加载未完成的时候,html并没有当前的元素节点,获取不到就是报错(这样我感觉很奇怪,但没办法人家就是这么设计的)
解决办法:

5.1.1 在chromeDriver.get(“www.baidu.com”)方法执行完之后,线程休眠一段时间,等他加载完,但是这样就显得很不智能,不过确实是一个办法

Thread.sleep(2000);//具体休眠时间看你电脑网速,还是有加载完网页的时间,预估一下就行

5.1.2 全局生效,每次获取元素的时候都会等5秒(根据你自己需要设置),一旦元素出现就会继续执行下去。只需要设置一次就行了,driver实例被关闭后也就消失。

这种方式程序只会等到页面加载完了(浏览器上那个小圈圈不转了)才会去执行下面代码,如果有时候页面大部分元素都加载完了,只有极个别元素,这样就很浪费时间

chromeDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

5.1.4 指定某个元素出现再去执行操作

//设置超时时间为10秒
WebDriverWait wait = new WebDriverWait(webDriver, 10);
//一直等到body元素出现后再去执行下面的操作
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.id("body")));

5.2 有些元素在iframe标签下面,导致获取不到

使用代码,将chromeDriver切换到iframe里面
有些网页可能有多层的iframe这时就需要进行一层一层的切进去,但是切出来只需要一下就好

5.2.1 如果iframe标签有name或者id的话

//直接切换到他frame()方法的参数为iframe的name或者id
chromeDriver.switchTo().frame("");

5.2.2 iframe当作一个元素进行切换

//找到iframe的标签
WebElement iframe = driver.findElement(By.tagName("iframe"));
//切换到改iframe
chromeDriver.switchTo().frame(iframe);

5.2.3切出iframe

chromeDriver.switchTo().defaultContent();

5.3 解决一些selenium识别的反爬

5.3.1 禁用启用Blink运行时的功能

window.navigator.webdriver的值设置为false

options.addArguments("--disable-blink-features=AutomationControlled");
chromeDriver.executeScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})", "");
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章           查看所有文章
加:2022-07-20 19:14:13  更:2022-07-20 19:14:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:31:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码