Java爬虫(一)

一、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);
    }
}
相关推荐
せいしゅん青春之我43 分钟前
【JavaEE初阶】TCP核心机制10——异常情况的处理
java·网络·笔记·网络协议·tcp/ip·java-ee
摇滚侠1 小时前
Spring Boot3零基础教程,把 Java 程序打包为 Linux 可执行文件,笔记91
java·linux·笔记
mount_myj1 小时前
敏感信息屏蔽(一)【java】
java·算法·极课堂
四谎真好看2 小时前
Java 黑马程序员学习笔记(进阶篇21)
java·开发语言·笔记·学习·学习笔记
Dnui_King2 小时前
Kingbase 接口兼容性测试
java
Java&Develop2 小时前
IDEA报错:前言中不允许有内容
java
软件架构师-叶秋2 小时前
spring boot入门篇之开发环境搭建
java·spring boot·后端
无敌最俊朗@3 小时前
SQLite 约束 (Constraints) 面试核心知识点
java·开发语言·jvm
憨憨崽&3 小时前
C语言、Java、Python 的选择与未来发展以及学习路线
java·c语言·python
在坚持一下我可没意见3 小时前
Java 网络编程:TCP 与 UDP 的「通信江湖」(基于UDP回显服务器)
java·服务器·开发语言·tcp/ip·udp·java-ee