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/
JAVA使用selenium的常见爬虫操作
!!!!!下载驱动之前检查自己浏览器的版本号为多少,下载对应版本的驱动,不然会导致程序无法调用浏览器

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文章来源地址https://www.toymoban.com/news/detail-472712.html

options.addArguments("--disable-blink-features=AutomationControlled");
chromeDriver.executeScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})", "");

到了这里,关于JAVA使用selenium的常见爬虫操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java学习笔记:爬虫-操作动态网页的Selenium

    Why Selenium? 有些网页内容是在浏览器端动态生成的,直接Http获取网页源码是得不到那些元素的。 Selenium可以自动启动一个浏览器、打开网页,可以用程序操作页面元素,也可以获得浏览器当前页面动态加载的页面元素。 比如:百度图片的图片是动态加载的。 用法: 1、下载安

    2024年02月13日
    浏览(31)
  • 爬虫便捷操作之selenium使用技巧

    在爬虫中占据比较重要的地位 是一种浏览器自动化的工具,所谓的自动化是指,我们可以通过代码的形式制定一系列的行为动作,然后执行代码,这些动作就会同步触发在浏览器中。 我们在抓取一些普通网页的时候requests基本上是可以满足的. 但是, 如果遇到一些特殊的网站

    2024年02月03日
    浏览(40)
  • Windows使用selenium操作浏览器爬虫

    以前的大部分程序都是操作Chrome,很少有操作Edge,现在以Edge为例。 Selenium本身是无法直接控制浏览器的,不同的浏览器需要不同的驱动程序,Google Chrome需要安装ChromeDriver、Edge需要安装Microsoft Edge WebDriver,其他浏览器也需要安装相应的驱动。 edge://version/ https://developer.micros

    2024年02月04日
    浏览(34)
  • 爬虫:使用Selenium模拟人工操作及获取网页内容

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月13日
    浏览(35)
  • 〖Python网络爬虫实战㉛〗- Selenium 的其他操作使用

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                 python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2024年02月16日
    浏览(30)
  • 爬虫(三):使用Selenium模拟人工操作及获取网页内容

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月11日
    浏览(32)
  • [爬虫]2.2.1 使用Selenium库模拟浏览器操作

    Selenium是一个非常强大的工具,用于自动化Web浏览器的操作。它可以模拟真实用户的行为,如点击按钮,填写表单,滚动页面等。由于Selenium可以直接与浏览器交互,所以它可以处理那些需要JavaScript运行的动态网页。 首先,我们需要安装Selenium库。你可以使用pip命令来安装:

    2024年02月16日
    浏览(38)
  • Windows使用selenium操作Edge浏览器实现爬虫

    以前的大部分程序都是操作Chrome,很少有操作Edge,现在以Edge为例。 Selenium本身是无法直接控制浏览器的,不同的浏览器需要不同的驱动程序,Google Chrome需要安装ChromeDriver、Edge需要安装Microsoft Edge WebDriver,其他浏览器也需要安装相应的驱动。 edge://version/ https://developer.micros

    2024年02月03日
    浏览(35)
  • 使用VSCode实现Java项目管理 Maven相关插件及配置(Maven换源)

    之前一直使用VSCode开发C、Go两种语言,现在需要对java进行学习,面对java的idea工具相对陌生,依旧想继续使用vscode作为开发工具,因此有了本篇文章 无论是idea还是vscode,最核心的功能可能就是编辑了,很多工具的优秀特性也都是来自于优秀的插件,因此首先需要配置VSCode的

    2023年04月23日
    浏览(40)
  • 使用Selenium和Java编写爬虫程序

    以下是一个使用Selenium和Java编写的音频爬虫程序,该程序使用了proxy的代码。请注意,这个示例需要在IDE中运行,并且可能需要根据您的系统和需求进行调整。 这个示例代码使用了Selenium的ChromeDriver,并设置了一个用户。它首先访问,然后查找并下载页面上的音频文件。请注

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包