cdp4j爬虫自动化学习

news2024/10/5 19:12:50

cdp4j爬虫自动化学习

  • cdp4j介绍
  • 依赖
  • 通过识别本地文件进行调试

cdp4j介绍

cdp4j是一个Java库,它提供了高级API来通过DevTools协议控制Chrome或Chromium。它可以用于自动使用网页和测试网页。cdp4j默认情况下可以完全运行,但可以配置为运行无头Chrome或Chromium。
使用cdp4j,要求必须有谷歌浏览器

依赖

	<!--cdp4j-->
    <!-- https://mvnrepository.com/artifact/io.webfolder/cdp4j -->
    <dependency>
        <groupId>io.webfolder</groupId>
        <artifactId>cdp4j</artifactId>
        <version>3.0.15</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.jvnet.winp/winp -->
    <dependency>
        <groupId>org.jvnet.winp</groupId>
        <artifactId>winp</artifactId>
        <version>1.28</version>
    </dependency>

通过识别本地文件进行调试

进行学习时,准备一个本地静态页面,该文件有一定要求,需要包含一些动态js进行加载后动态操作页面,目的为学习cdp4j的动态html获取能力,保存该文件为hello.html,后面代码会进行读取执行


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>海鸥的快乐一天</title>
    
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
    <meta name="apple-mobile-app-capable" content="yes">
    <meta name="apple-mobile-app-status-bar-style" content="black">
   
    <meta name="description" content="description">
    <meta name="keywords" content="keywords">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="author" content="cononico">
    <meta name="application-name" content="Cononico" >
</head>
<body>
    <h1>hello world!</h1>
    <p class="txt">这是一段普通文本, 属性为class="txt"</p>
    <input class="test" name="test" type="text" value="白日依山尽,黄河入海流,欲穷千里目,更上一层楼。" style="width: 400px;"/>
</body>

<script>
    window.onload = function() {
        document.body.append("<div class='insert'>这是一段插入的div标签内容</div>");
        var div = document.createElement("div");
        div.setAttribute("class", "insert");
        div.setAttribute("id", "dynamic_div");
        div.innerHTML = "这是另外一段用js插入的div标签内容,用来测试动态js加载内容抓取,元素的id为dynamic_div";
        document.body.appendChild(div);
    }
</script>
</html>

用chrome打开后页面是这样:
在这里插入图片描述

操作页面的java代码:

public class Hello {
    public static void main(String[] args) throws Exception {
    	// 这里是访问本地磁盘文件
    	// 如果需要访问互联网地址,直接改为该地址就行了,例如访问百度主页https://www.baidu.com
        URL url = new URL("file:///D:/xx/xx/crawler-study/hello.html");
		
		// 创建浏览器启动器
        Launcher launcher = new Launcher();

        try (SessionFactory factory = launcher.launch();
             Session session = factory.create()) {
            session.navigate(url.toString());
            session.waitDocumentReady();
            /*获取内容进行测试*/
            String value = session.getText(".test", "value");
            System.out.println("旧内容为: " + value);
            Thread.sleep(666);
            session.setAttribute("input", "value", "测试插入内容");
            value = session.getAttribute("input", "value");
            System.out.println("新内容为: " + value);
            Thread.sleep(666);
            /*点击测试输入框*/
            session.click("input[name=test]");
            Thread.sleep(666);
            // 获取动态插入内容
            String txt = session.getText("#dynamic_div");
            System.out.println("txt = " + txt);
            String className = session.getAttribute("#dynamic_div", "class");
            System.out.println("className = " + className);
            Thread.sleep(666);
            // 动态修改输入框 内容
            session.setAttribute("input", "value", txt);
            Thread.sleep(3000);
        }
    }
}

总结:cdp4j有很多api可以使用,足以满足各式各样的数据获取需求,并且可以和jsoup进行配合获取数据,有这个需求的可以自己多琢磨琢磨,比如注入js代码,动态执行自己的js脚本,就一个字:强!

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

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

相关文章

Spring Cloud Eureka 服务注册中心怎么配置

Eureka&#xff0c;这里是 Spring Cloud Eureka 的简称&#xff0c;是 Spring Cloud Netflix 组件之一。Spring Cloud Netflix 中核心的组件包括了服务治理&#xff08;Eureka&#xff09;&#xff0c;服务容断&#xff08;Hystrix&#xff09;&#xff0c;路由&#xff08;Zuu…

hypermesh和lsdyna联合仿真计算某汽车座椅进行的头冲吸能实验

导读&#xff1a;本案例运用hypermesh和lsdyna联合仿真&#xff0c;主要是针对某座椅进行的头冲吸能实验的仿真计算。这个工况考察座椅背部的塑料件的破坏情况&#xff0c;以及头部模块的加速度情况&#xff0c;达到保护人头部的效果。 本案例用户可以学习到&#xff1a; 1…

大学生程序设计创新实践基地2022年冬季校赛(NPU ACM Winter Contest)

大学生程序设计创新实践基地2022年冬季校赛&#xff08;NPU ACM Winter Contest&#xff09; 总述 总体考察对于板子的熟练变换&#xff0c;以及考察离谱地使用python和对getchar()以及EOF的基础掌握程度。 B&#xff0c;D&#xff0c;E是防AK题目。 题解 A死锁 ​ input…

【第九章 SQL优化_插入数据,主键优化,order by优化】

第九章 SQL优化_插入数据&#xff0c;主键优化&#xff0c;order by优化 1.插入数据&#xff1a; &#xff08;1&#xff09;insert&#xff1a; &#xff08;1&#xff09;批量插入数据&#xff1a; Insert into tb_test values(1,Tom),(2,Cat),(3,Jerry); &#xff08;2&am…

PyTorch(五)神经网络基础

文章目录Log一、Containers 基本骨架1. Module2. Sequential二、 Convolution Layers 卷积层1. torch.nn.functional① Conv2d2. torch.nn① Conv2d三、Pooling layers 池化层1. nn.MaxPool2d 下采样&#xff08;最大池化&#xff09;四、Non-linear Activations 非线性激活1. …

2022CCSP T1最少充电次数

记录第一次CCSP竞赛。一共3题&#xff0c;只做出第一题&#xff0c;用时3h30m&#xff08;累&#xff09;&#xff0c;ac了开心地吃了个午饭。然而饭饱之后&#xff0c;大脑完全提不起神看着题面昏昏欲睡。第二题是虚拟内存&#xff0c;超级大模拟&#xff0c;刚好这个学期学os…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java流浪动物救助网站a1wsz

毕业设计也不需要做多高端的程序&#xff0c;毕业设计对于大多数同学来说&#xff0c;为什么感觉到难&#xff0c;最重要的一个原因&#xff0c;那就是理论课到实践课的转变&#xff0c;很多人一下不适应&#xff0c;本能开始拒绝&#xff0c;如果是一个考试&#xff0c;大家都…

ITU、MCC和MNC介绍以及China运营商对照表

相关概念 ITU 国际电信联盟是联合国负责信息通信技术&#xff08;ICT&#xff09;事务的专门机构。 国际电联成立于1865年&#xff0c;为了促进国际上通信网络的互联互通。他们进行全球无线电频谱和卫星轨道的划分&#xff0c;制定技术标准以确保实现网络和技术的无缝互连&…

【Docker】30条Docker常用命令图文举例总结

本期目录1. 帮助启动类命令2. 镜像命令2.1 列出镜像2.2 搜索远程库镜像2.3 拉取镜像2.4 查看所占空间2.5 删除镜像2.6 面试题3. 容器命令3.1 新建启动容器1&#xff09;启动交互式容器3.2 列出当前所有正在运行的容器3.3 退出容器3.4 启动已停止的容器3.5 重启容器3.6 停止容器…

第六章 映射:Mappings

文章目录1、Mapping 简介1.1 mapping 是啥&#xff1f;1.2 如何查看索引映射2、自动映射&#xff1a;dynamic mapping2.1 自动类型推断规则2.2 mapping 的使用禁忌2.3 自动映射器的意义是什么&#xff1f;3、手动映射&#xff1a;Explicit mapping3.1 创建索引的 mapping3.2 修…

电子产品量产工具项目开发中遇到的问题(更新......)

1、找不到tslib.h库的头文件 这是因为找不到tslib库的头文件。 确定工具链中头文件、库文件目录&#xff0c;对于 IMX6ULL &#xff0c;命令如下 echo main(){}| arm-linux-gnueabihf-gcc -E -v -找到了编译器arm-linux-gnueabihf的include和lib文件夹 /usr/local/arm/gcc-l…

AT155 高压绝缘电阻测试仪 都有哪些功能?

、 高压绝缘电阻测试仪是—款手持式仪表主要用来测量交流&#xff0f;直流电压、 电阻、 短路蜂鸣测试和 绝缘电阻测量。 式高压绝缘电阻测试仪具有4个量程用千绝缘电阻、 AC/DC电压、 电阻和短路蜂鸣测试。 设计达到以下安全标准 &#xff0e;绝缘测试量程O.lMn to 60Gn。…

机器学习 决策树基础 ID3、C4.5、CART

文章目录参考决策树指标基尼系数基础公式公式理解引入划分后的公式划分后公式的理解信息熵、信息增益如何理解信息熵两种指标的对比划分策略ID3定义举例计算各属性的信息增益选取最优属性作划分对子节点作递归划分生成结果ID3的缺点C4.5信息增益率优化缺点CARTCART相较于前两者…

Windows下使用C语言创建定时器并周期和网络调试助手通信

在Windows C下采用timeSetEvent函数来设置定时器 关于timeSetEvent的函数原型及注释如下所示&#xff1a; MMRESULT timeSetEvent(UINT uDelay, // 定时事件的触发周期&#xff0c;单位为毫秒UINT uResolution, // 定时事件的精度&#xff0c;单位…

161-183-mysql-高级篇-事务-锁-mvcc

116-mysql-事务篇-锁&#xff1a; 推荐网站 mysql学习网站&#xff1a;https://www.bilibili.com/video/BV1iq4y1u7vj?p109&vd_source39a1ba1654411bc9ab90f6f2926600b7 mysql&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/ 算法&#xff1a;https://www.cs.us…

我看世界杯——来自一个“假”球迷视角

世界杯还有一个星期就要结束了&#xff0c;说实话&#xff0c;我之前是一场球都没有&#xff0c;对足球知道也甚少&#xff0c;妥妥一个假球迷了。这次世界杯感觉离自己特别近&#xff0c;身边的很多朋友都在看&#xff0c;也不乏赌球的小伙伴&#xff0c;自己的感悟也比较深&a…

电机定子模态的空间特征

对于电机定子模态而言&#xff0c;通常不是按传统的阶次顺序&#xff08;按频率从小到大&#xff09;来描述它们&#xff0c;而是按空间节点数的顺序来描述&#xff0c;这在很大程度上是因为受激励的电磁力波的振型的影响。 1、传统模态阶次表示方式 传统模态阶次的顺序都是按…

安卓期末大作业——个人简历APP源码和设计报告

Android课程需求文档 设计题目&#xff1a; 个人简历APP 学生姓名&#xff1a; 学号&#xff1a; 1&#xff0e;Smart.apk功能设计说明 Android真机运行进入该app。背景音乐服务播放正常&#xff0c;并设置可通过右上角按钮关闭musicservice&#xff1b; 1通过viewpager实…

Jenkins+SonarQube 代码质量检测详解

一、SonarQube 概述 1、SonarQube 简介 Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。 Sonar Qube通过插件机制,Sonar可以集成不同的测试工具,代码分析工具…

【JavaWeb开发-Servlet】将项目打包部署在本地

Servlet与JSP进阶十&#xff1a;Web应用程序打包与发布&#xff08;war包&#xff09;_小枯林的博客-CSDN博客_servlet项目如何打成war包本篇博客主要内容是&#xff1a; ●如何使用Eclipse打war包&#xff1b; ●打好的war包如何发布&#xff1b;访问演示&#xff1b; ●解决u…