一、Java爬虫简介
1.1 Selenium
Selenium爬虫是一种基于浏览器自动化的爬虫技术,可以模拟用户的操作行为,实现对动态网页的爬取。
1.2 jsoup
Jsoup拥有十分方便的api来处理html文档,比如参考了DOM对象的文档遍历方法,参考了CSS选择器的用法等等。
1.3 浏览器驱动下载
下载指定的浏览器驱动,需要和自己电脑上的浏览器版本一致。
二、引入依赖
XML
<jsoup.version>1.17.2</jsoup.version>
<selenium-java.vesion>4.21.0</selenium-java.vesion>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium-java.vesion}</version>
</dependency>
三、测试
java
import java.time.Duration;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
@Slf4j
class WebCrawlerUtilTest {
private static WebDriver driver;
@BeforeAll
public static void setUp() {
String webdriverName = "webdriver.chrome.driver";
String driverPath = "E:\\Java_Tools\\Browser_driver\\Chrome\\version_126\\chromedriver-win64\\chromedriver.exe";
// 设置Chrome驱动位置
System.getProperties().setProperty(webdriverName, driverPath);
}
@AfterEach()
public void after() {
ThreadUtils.sleep(Duration.ofSeconds(5));
driver.quit();
}
@Test
void test_open_browser() {
// 加载 Chrome 浏览器驱动
driver = new ChromeDriver();
ThreadUtils.sleep(3);
//设置访问地址
String url = "https://www.baidu.com/";
driver.get(url);
// 新标签页打开百度新闻
driver.findElement(By.linkText("新闻")).click();
// 新标签页打开百度视频
driver.findElement(By.linkText("地图")).click();
}
@Test
void test_find_element() {
// 加载 Chrome 浏览器驱动
driver = new ChromeDriver();
ThreadUtils.sleep(3);
//设置访问地址
String url = "https://www.baidu.com/";
driver.get(url);
// 新标签页打开百度新闻
WebElement we = driver.findElement(By.xpath("//input[@id='kw']"));
// 往搜索框里输入"五一"的搜索内容
we.sendKeys("五一");
we = driver.findElement(By.id("su"));
we.click();
}
@Test
public void test_find_element_2() {
// 加载 Chrome 浏览器驱动
driver = new ChromeDriver();
ThreadUtils.sleep(3);
//设置访问地址
String url = "https://www.baidu.com/";
driver.get(url);
List<WebElement> wes = driver.findElements(By.className("title-content-title"));
log.info("find_elements()返回的数据类型是:type({}})", wes);
for (WebElement we : wes) {
log.info(we.toString());
log.info(we.getText());
}
}
@Test
public void test_mouse_action() {
// 加载 Chrome 浏览器驱动
driver = new ChromeDriver();
ThreadUtils.sleep(3);
//设置访问地址
String url = "https://www.baidu.com/";
driver.get(url);
// 设置浏览器窗口的大小,driver.set_window_size(宽,高);
driver.manage().window().setSize(new Dimension(1200, 800));
WebElement we = driver.findElement(By.id("s-usersetting-top"));
Actions action = new Actions(driver);
action.moveToElement(we).perform();
ThreadUtils.sleep(5);
WebElement we2 = driver.findElement(By.linkText("图片"));
action.contextClick(we2).perform();
ThreadUtils.sleep(5);
// 用于刷新当前页面
driver.navigate().refresh();
}
@Test
public void test_keyboard_action() {
// 加载 Chrome 浏览器驱动
driver = new ChromeDriver();
ThreadUtils.sleep(3);
//设置访问地址
String url = "https://www.baidu.com/";
driver.get(url);
WebElement we = driver.findElement(By.id("kw"));
// 模拟键盘操作
we.sendKeys("五一");
// 使用回车代替点击 driver.find_element(By.ID, "su")
we.sendKeys(Keys.ENTER);
}
}