Java+Selenium爬虫介绍
场景:springboot+selenium实现自动化爬取数据,爬虫是常见的一个功能,因为我们在做项目的时候会经常使用到一些数据从别的地方获取到,常用的是用python去爬虫。但Java也可以去实现简单的爬虫。选用技术有springboot、selenium
深入了解见官网文档:https://www.selenium.dev/documentation/en/
selenium介绍
Selenium (WEB自动化工具),Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
总的来说就是Selenium是一个涵盖了一系列工具和库的总体项目,这些工具和库支持并支持Web浏览器的自动化。
selenium包括WebDriver、集成开发环境、网格
WebDriver
如果您是从桌面网站或移动网站测试自动化开始的,那么您将使用WebDriver API。 WebDriver 使用浏览器供应商提供的浏览器自动化API来控制浏览器并运行测试。就像真实用户正在操作浏览器一样。由于WebDriver不需要使用应用程序代码来编译其API,因此它不是侵入式的。因此,您正在测试实时发布的同一应用程序。
驱动程序
Selenium支持市场上所有主流浏览器,例如Chrom(ium),Firefox,Internet Explorer,Opera和Safari。
驱动程序下载地址:https://www.selenium.dev/documentation/en/webdriver/driver_requirements/
选择与你浏览器对应的驱动程序版本比如我的谷歌版本是90的,我需要下载90的驱动程序
创建一个spring boot项目加入selenium依赖
<!--selenium依赖-->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
在resources下创建文件放入位置把驱动程序放入
新建一个Java类
package com.selenium.test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumTest {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "src/main/resources/selenium/driver/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");// 访问的网址
driver.manage().window().maximize();// 网站最大化
}
}
运行结果如下:
WebDriver常用api
在网站中检查元素。定位元素位置是最常用的也是需要掌握的。定位元素的方法有多种,根据dom文档树去定位元素。下面一种一种的介绍
方法 | 作用 |
---|---|
findElement() | 查找元素 |
sendKeys() | 设置值 |
click() | 点击作用 |
findElements() | 查找的是多个元素 |
drive.quit() | 退出浏览器 |
drive.switchTo().frame() | 切换iframe窗口 |
通过id去定位元素:
driver.findElement(By.id("user_login")).sendKeys("xxxxx");
通过name去定位元素:
driver.findElement(By.name("user[login]")).sendKeys("zzzz");
通过class name定位元素:
driver.findElement(By.className("login-password__account-input")).sendKeys("cccc");
通过tag name定位元素:
driver.findElements(By.tagName("input")).get(4).sendKeys("ssss");
通过link text定位元素:
driver.findElement(By.linkText("点此注册")).click();
结果
通过部分链接字体(partialLinkText)定位元素:
driver.findElement(By.partialLinkText("注册")).click();
最后一种
通过xpath定位元素:
driver.findElement(By.xpath("//*[@id=\"user_login\"]")).sendKeys("xxx");
右键找到copy-copy xpath;
介绍完定位元素基本上就可以说差不多了。