Java爬虫(一)
一、Java爬虫简介
1.1 Selenium
Selenium爬虫是一种基于浏览器自动化的爬虫技术,可以模拟用户的操作行为,实现对动态网页的爬取。
1.2 jsoup
Jsoup拥有十分方便的api来处理html文档,比如参考了DOM对象的文档遍历方法,参考了CSS选择器的用法等等。
1.3 浏览器驱动下载
下载指定的浏览器驱动,需要和自己电脑上的浏览器版本一致。
- Chrome驱动下载地址
- Microsoft Edge驱动下载地址
- Firefox驱动下载地址
二、引入依赖
<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>
三、测试
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;@BeforeAllpublic 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();}@Testvoid 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();}@Testvoid 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();}@Testpublic 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());}}@Testpublic 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();}@Testpublic 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);}
}
相关文章:
Java爬虫(一)
一、Java爬虫简介 1.1 Selenium Selenium爬虫是一种基于浏览器自动化的爬虫技术,可以模拟用户的操作行为,实现对动态网页的爬取。 1.2 jsoup Jsoup拥有十分方便的api来处理html文档,比如参考了DOM对象的文档遍历方法,参考了CSS选…...

element-plus form表单组件之el-date-picker日期选择器组件
el-date-picker日期选择器组件可根据年,月,日期,时间范围来进行选择,可以自定义日期格式,和样式,还提供多种内置事件。 主要属性如下 属性名说明类型可选值默认值model-value / v-model绑定值,…...

如何与情绪好好相处,真正成为情绪的主人
一、教程描述 若要成为一个聪明的人,就要学会做情绪的主人,而不是被情绪控制自己,为什么要做情绪的主人?至少有以下两个方面原因。 其一,都说,世上还是好人多。可是,为什么你身边没有一个好人…...

RK3588/算能/Nvidia智能盒子:[AI智慧油站」,以安全为基,赋能精准经营
2021年9月,山东省应急管理厅印发了关于《全省危险化学品安全生产信息化建设与应用工作方案(2021-2022 年)》的通知,要求全省范围内加快推进危险化学品安全生产信息化、智能化建设与应用工作,建设完善全省危险化学品安全…...
【眼在手外D435相机支架】
完整UR机械臂的GRCNN抓取网络教程参考以下博客: 【眼在手外D435相机支架】 0. 【机械臂视觉抓取从理论到实战】 GRCNN抓取网络学习1【Jacquard数据集等效制作】GRCNN抓取网络学习2【自制Jacquard数据集训练】GRCNN抓取网络学习3【自制Jacquard数据集模型调优】GRCNN抓取网络学…...
js组合继承
JS组合继承(combination inheritance)是一种常用的继承模式,它通过将原型链和构造函数组合使用来实现继承。 下面是JS组合继承的详细解析和代码示例: 创建父类(基类)的构造函数 function Parent(name) {…...

Spring-kafka消费者消费的一些问题
前言 Spring Kafka 无缝集成了 Spring Boot、Spring Framework 及其生态系统中的其他项目,如 Spring Cloud。通过与 Spring Boot 的自动配置结合,开发者可以快速启动和配置 Kafka 相关的功能。无需编写大量样板代码即可实现 Kafka 的生产和消费功能&…...
【自我提升】提升能量书籍
《原子习惯》 (Atomic Habits) - 詹姆斯克利尔 (James Clear): 核心思想:微小的习惯改变可以带来显著的生活变化。方法: 将大目标拆分为可管理的小习惯。使用“习惯堆叠”技术,将新习惯与已有习惯结合。创建支持性环境,…...

python图像处理库-PIL(Pillow)
PIL库全称为Python Imaging Library,即Python图像处理库,是一个在Python中用于处理图像的非常流行的库。 一、PIL介绍 这个库提供了广泛的文件格式支持、高效的内部表示以及相当强大的图像处理功能。 核心图像库旨在快速访问存储在几种基本像素格式中的数…...

【2024】kafka streams的详细使用与案例练习(2)
目录 前言使用1、整体结构1.1、序列化 2、 Kafka Streams 常用的 API2.1、 StreamsBuilder2.2、 KStream 和 KTable2.3、 filter和 filterNot2.4、 map 和 mapValues2.5、 flatMap 和 flatMapValues2.6、 groupByKey 和 groupBy2.7、 count、reduce 和 aggregate2.8、 join 和 …...

qt 简单实验 读取json格式的配置文件
1.概要 2.代码 //#include "mainwindow.h"#include <QApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> #include <QDebug> //读取json数据的配置文件QJsonObject readJsonConfigFile(const QString …...

Docker常用命令与实战示例
docker 1. 安装2. 常用命令3. 存储4. 网络5. redis主从复制示例6. wordpress示例7. DockerFile8. 一键安装超多中间件(compose) 1. 安装 以centOS系统为例 # 移除旧版本docker sudo yum remove docker \docker-client \docker-client-latest \docker-c…...
数据结构(基础知识)
基础概念: 数据:数据是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合 数据元素:是数据的基本单位,在程序中常作为一个整体来考虑 数据对象&#…...

计算机网络:网络层 - 路由选择协议
计算机网络:网络层 - 路由选择协议 路由器的结构路由选择协议概述自治系统 AS内部网关协议路由信息协议 RIP距离向量算法RIP报文格式收敛问题 开放最短路径优先 OSPF基本工作原理自治系统分区 外部网关协议BGP-4 路由器的结构 如图所示,路由器被分为路由…...

JupyterLab使用指南(六):JupyterLab的 Widget 控件
1. 什么是 Widget 控件 JupyterLab 中的 Widget 控件是一种交互式的小部件,可以用于创建动态的、响应用户输入的界面。通过使用 ipywidgets 库,用户可以在 Jupyter notebook 中创建滑块、按钮、文本框、选择器等控件,从而实现数据的交互式展…...

OpenCV 特征点检测与匹配
一 OpenCV特征场景 ①图像搜索,如以图搜图; ②拼图游戏; ③图像拼接,将两长有关联得图拼接到一起; 1 拼图方法 寻找特征 特征是唯一的 可追踪的 能比较的 二 角点 在特征中最重要的是角点 灰度剃度的最大值对应的…...

css布局之flex应用
/*父 100*/.parent-div {/* 这里添加你想要的属性 */display: flex;flex-direction: row; //行justify-content: space-between; //左右对齐align-items: center;flex-wrap: wrap; //换行}/*中 90 10 */.middle-div {/* 这里添加你想要的属性 */display: flex;flex-direction:…...
树莓派4B设置AP热点步骤
树莓派4B设置AP热点步骤:先进入root模式 预先进行apt-get update 第1步:安装network-manager sudo apt-get install network-manager第2步:安装git apt-get install git apt-get install util-linux procps hostapd iproute2 iw haveged …...

Java程序之百鸡百钱问题
题目: 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,…...

Mybatis——动态sql
if标签 用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接sql。 <where>标签用于识别语句是否需要连接词and,识别sql语句。 package com.t0.maybatisc.mapper;import com.t0.maybatisc.pojo.Emp; import org.a…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...