java--HtmlUnit--模拟浏览器操作--自动化操作浏览器--自动登录校园网为案例

news2024/9/20 10:29:58
写在前面:
闲来无事,因为宿舍每次嫌登录校园网有点免费。然后想着能不能一键自动化实现。然后更麻烦了,哈哈哈。不过倒是写一次代码就可以了。
可能不是特别系统,因为资料太少了。都是案例驱动找的资料。花了3大节课才搞完了。
会用js的话,学起来倒是比较简单一点。(说起来我咋不用js代码去做,有时间去看看)

HtmlUnit介绍

HtmlUnit是一个“Java程序的无GUI浏览器”。 它对 HTML 文档进行建模,并提供一个 API,允许您调用页面、填写表单、单击链接等。 就像您在“普通”浏览器中所做的那样。

安装–maven依赖

<dependency>
    <groupId>net.sourceforge.htmlunit</groupId>
    <artifactId>htmlunit</artifactId>
    <version>2.70.0</version>
</dependency>

入门案例

得到xxx页面id为xxx里面所有div内容
网页为

<?xml version="1.0" encoding="GBK"?>
<html xmlns="http://www.w3.org/1999/xhtml" style="background: url(&quot;https://api.ixiaowai.cn/mcapi/mcapi.php">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
    <meta id="viewport" name="viewport" content="target-densitydpi=device-dpi,width=640px,user-scalable=1"/>
    <meta name="renderer" content="webkit"/>
    <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE"/>
    <title>
      unit
    </title>
</head>
  <body>
    <div id="abc">
      <a href="www.baidu.com">1231</a>
      <div>a</div>
      <div>b</div>
      <div>c</div>
      <div>d</div>
      <div>e</div>
      <div>f</div>
      <div>g</div>
      <div>h</div>
      <div>i</div>
      <div>g</div>
    </div>
  </body>
</html>

    @Test
    public void getDivContent() {
    	//获取webclient浏览器
        try (WebClient webClient = new WebClient();) {
        	//获取对应网站的页面
            HtmlPage page = webClient.getPage("http://127.0.0.1:5500/Test.html");
			
			//根据id获取元素
            HtmlElement abc = page.getHtmlElementById("abc");
		
			//获取里面所有的div
            List<HtmlElement> divs = abc.getByXPath("div");

			//收集里面div所有的内容
            StringBuilder sb = new StringBuilder();
            for (HtmlElement div : divs) {
                sb.append(div.getTextContent());
            }
            //断言
            Assert.assertEquals(sb.toString(),"abcdefghig");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

在这里插入图片描述

浏览器

创建

try (WebClient webClient = new WebClient()) {}

也可以指定浏览器
在这里插入图片描述

浏览器选项

// 禁用js
webClient.getOptions().setJavaScriptEnabled(false);
// 禁用css
webClient.getOptions().setCssEnabled(false);
//对未处理的js错误执行js
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
// 上面三个好像只是为了更快,减少不需要的

获取页面

HtmlPage page = webClient.getPage(url);
//url为网站的url

页面元素选择器

id选择器

这个是最准确的,但是不是所有的元素都有id。

//获取对应id的元素
<E extends HtmlElement> E page.getHtmlElementById(id)

List<DomElement> getElementsById(final String elementId)

我们选用第一个,可以得到html元素的专门的组件
如下面我们可以得到input组件和password组件,里面的封装的方法更准确。
在这里插入图片描述
常见的对应

html组件htmlunit
aHtmlAnchor
inputHtmlInput
buttonHtmlButton
imageHtmlImage
formHtmlForm
tableHtmlTable
labelHtmlLabel
optionHtmlOption

name选择器

这个也比较准确,但一样的也不是都有name

//返回具有指定名称的元素。如果有多个元素具有此名称,那么此方法将返回第一个名称
 <E extends DomElement> E getElementByName(final String name)

css选择器

xpath
需要强转。

<T> List<T> getByXPath(final String xpathExpr)

HtmlAnchor anchor = (HtmlAnchor) page.getByXPath("复制过来的xpath"); 

在这里插入图片描述

返回文档中与指定选择器组匹配的第一个元素。

<N extends DomNode> N querySelector(final String selectors)

组件操作

每个组件对应操作,如点击输入啥的。
这时候我们如果上面选择的是html对应的组件就很好操作了。
idea会有提示。
如a标签的点击。还有着封装很多的方法,如修改值setvalue,修改id等等。
在这里插入图片描述

动态数据加载

需要设置js为true,然后需要等待数据加载完成。
css一定要禁用,不然很难用。

webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
Thread.sleep(500);

调试技巧

我们可以选择到一个操作就把这个操作的页面打印出来
这样我们就可以在文件fw中去查看了
在这里插入图片描述
在这里插入图片描述

登录案例

登录页面
在这里插入图片描述
然后通过F12进行查看。
在这里插入图片描述
其有id所以我们可以直接进行id选择,然后设置值。
在这里插入图片描述
查看按钮的
在这里插入图片描述
有name,然后是button组件
click返回点击后的页面。
在这里插入图片描述
这样就登录成功了。
如果需要动态获取的需要等待数据加载。
如这个没有等待的。
在这里插入图片描述

这个有等待的,设置的大小自己调试,我这里50就可以加载出来了。
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis运维之swap影响及解决方案

一、操作系统SWAP swap空间对于操作系统来说比较重要&#xff0c;当我们使用操作系统的时候&#xff0c;如果系统内存不足&#xff0c;常常会将一部分内存数据页进行swap操作&#xff0c;以解决临时的内存困境。swap空间由磁盘提供&#xff0c;对于高并发场景下&#xff0c;sw…

全球土壤湿度数据获取方法

土壤湿度亦称土壤含水率&#xff0c;表示土壤干湿程度的物理量。是土壤含水量的一种相对变量。通常用土壤含水量占干土重的百分数是示&#xff0c;亦称土壤质量湿度&#xff0c;如用土壤水分容积占土壤总容积的百分数表示&#xff0c;则称土壤容积湿度。通常说的土壤湿度&#…

Vivado中VIO IP核的使用

Vivado中VIO IP核的使用一、写在前面二、VIO IP核配置三、VIO联调四、写在后面一、写在前面 Vivado中的VIO&#xff08;Virtual Input/Output&#xff09; IP核是一种用于调试和测试FPGA设计的IP核。它允许设计者通过使用JTAG接口读取和写入FPGA内部的寄存器&#xff0c;从而检…

【JavaEE】关于synchronized总结-Callable用法及JUC的常见问题

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶synchronized原理是什么&#xff1f;synchronized到底有什么特点&#xff0c;synchronized的锁策略是什么&#xff0c;是怎么变化的呢&#xff1f;本篇文章总结出, Synchronized 具有以下特性…

【Java|golang】1041. 困于环中的机器人

在无限的平面上&#xff0c;机器人最初位于 (0, 0) 处&#xff0c;面朝北方。注意: 北方向 是y轴的正方向。 南方向 是y轴的负方向。 东方向 是x轴的正方向。 西方向 是x轴的负方向。 机器人可以接受下列三条指令之一&#xff1a; “G”&#xff1a;直走 1 个单位 “L”&…

Markdown 语法大全

Markdown是一种轻量级标记语言&#xff0c;常用于撰写博客、文档、论文等。它可以让你使用易读易写的纯文本格式来编写文档&#xff0c;然后通过转换成有效的HTML文档进行发布。以下是Markdown常用的语法&#xff1a; 这里写目录标题标题列表引用一级引用嵌套引用粗体和斜体删除…

技术复盘(1)--redis

技术复盘--redis技术复盘(1)--redis资料地址准备工作发展史redis-windowsredis-windows-说明redis-centos7安装jdk安装redisredis-key基本命令redis-string命令redis-list命令redis-set命令redis-hash命令redis-zset命令redis-geospatial命令redis-hyperloglog命令redis-bitmap…

【Linux驱动开发】024 INPUT子系统

一、前言 按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c;Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备&#xff0c;只是在此基础上套上了 input 框架&#xff0c;用户只需要负责上报输入事件&#xff0c;比如…

文本聚类与摘要,让AI帮你做个总结

你好&#xff0c;我是徐文浩。 上一讲里&#xff0c;我们用上了最新的ChatGPT的API&#xff0c;注册好了HuggingFace的账号&#xff0c;也把我们的聊天机器人部署了出去。希望通过这个过程&#xff0c;你对实际的应用开发过程已经有了充足的体验。那么这一讲里&#xff0c;我们…

[目标识别-论文笔记]Object Detection in Videos by Short and Long Range Object Linking

文章标题&#xff1a;2018_Cite13_Tang——Object Detection in Videos by Short and Long Range Object Linking 这篇论文也被叫做“2019_Cite91_TPAMI_Tang——Object Detection in Videos by High Quality Object Linking” 如果这篇博客对你有帮助&#xff0c;希望你 点赞…

ES索引库操作

文章目录1、对索引库的操作&#xff1a;创建、删除、查看2、文档操作3、 RestClient操作索引库4、利用RestClient实现文档的CRUD5、 批量导入功能有了索引库相当于数据库database&#xff0c;而接下来&#xff0c;就是需要索引库中的类型了&#xff0c;也就是数据库中的表&…

nssctf web入门(1)

这里通过nssctf的题单web安全入门来写&#xff0c;会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列&#xff0c;之后会一直出这个题单的解析&#xff0c;题目一共有28题&#xff0c;打算写10篇。 [SWPUCTF 2021 新生赛]jicao [SWPUCTF 2021 新生赛]j…

RL4RS,离线强化学习,无模型强化学习等等资源汇总

发现好文章&#xff1a; 强化学习推荐系统综述&#xff1a;Reinforcement Learning based Recommender Systems: A Survey 强化学习图鉴&#xff5c;你与最优策略之间&#xff0c;可能还差一本离线强化学习秘籍 科学应用强化学习创新论文洞察 https://hub.baai.ac.cn/view/18…

【论文精读】PP-YOLOE: An evolved version of YOLO

文章目录前言一、可扩展的 Backbone 和 Neck二、更高效的标签分配策略 TAL (Task Alignment Learning)三、更简洁有效的 ET-Head (Efficient Task-aligned Head)前言 百度飞桨团队发布了 PP-YOLOE&#xff0c;与其他 YOLO 系列算法相比&#xff0c;其具有更强的性能、更丰富灵…

8.2 正态总体的参数的检验

学习目标&#xff1a; 如果我要学习正态总数的参数检验&#xff0c;我会按照以下步骤进行学习&#xff1a; 学习正态分布的基本知识&#xff1a;正态分布是统计学中非常重要的概率分布之一&#xff0c;掌握其基本知识包括概率密度函数、期望值、方差、标准差等是非常重要的。 …

Prometheus - Grafana 监控 MySQLD Linux服务器 demo版

目录 首先是下载Prometheus 下载和安装 配置Prometheus 查看监控数据 监控mysql demo 部署 mysqld_exporter 组件 配置 Prometheus 获取监控数据 -------------------------------------- 安装和使用Grafana 启动Grafana -------------------------------------- 配…

MySQL5.5安装图解

一、MYSQL的安装 &#xff11;、打开下载的mysql安装文件mysql-5.5.27-win32.zip&#xff0c;双击解压缩&#xff0c;运行“setup.exe” &#xff12;、选择安装类型&#xff0c;有“Typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项&#xff0c;选择“Cu…

VSD Viewer for Mac,Visio绘图文件阅读器

VSD Viewer for Mac版是mac上一款非常强大的Visio绘图文件阅读器&#xff0c;它为打开和打印Visio文件提供了简单的解决方案。可以显示隐藏的图层&#xff0c;查看对象的形状数据&#xff0c;预览超链接。还可以将Visio转换为包含图层&#xff0c;形状数据和超链接的PDF文档。 …

【状态估计】基于增强数值稳定性的无迹卡尔曼滤波多机电力系统动态状态估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Linux 进程管理之四大名捕

一、四大名捕 四大名捕&#xff0c;最初出现于温瑞安创作的武侠小说&#xff0c;是朝廷中正义力量诸葛小花的四大徒弟&#xff0c;四人各怀绝技&#xff0c;分别是轻功暗器高手 “无情”、内功卓越的高手“铁手”、腿功惊人的“追命” 和剑法一流的“冷血”。 本文四大名捕由…