Puppeteer 的使用(Java版本)

前言:puppeteer和selenium的功能很相似,都是加载浏览器驱动去模拟浏览器行为但功能比selenium要强大的多。

其他描述:Puppeteer 是一个控制 headless Chrome 的 Node.js API 。它是一个 Node.js 库,通过 DevTools 协议提供了一个高级的 API 来控制 headless Chrome。

这里可能有童靴有疑问了,这是Node.js 的API,我不会Node.js怎么办?

放心,已有大佬将其做了Java的封装。

地址:https://github.com/fanyong920/jvppeteer

由于自己平时开发框架使用的是webmagic,所以就简单封装了个jvppeteer的downloader,可能封装的细节不是很完善,见笑了。

代码资源地址:https://download.csdn.net/download/zky736162010/15558475

代码调用:

 //配置监听器,用于监听采集成功和失败的情况
        List<SpiderListener> spiderListenerList = new ArrayList<>(1);
        spiderListenerList.add(supervisionSpiderListener);

        //下载器,配置代理
        ChromiumOptions options = new ChromiumOptions();
        options.setUseHeadless(true);

        PuppeteerDownloader puppeteerDownloader = new PuppeteerDownloader(spiderListenerList,options);
        puppeteerDownloader.setProxyProvider(new KuaiDaiLiProxyProvider());
        puppeteerDownloader.setChromiumAction(xxAction);

 XXAction.java:

@Component
public class XXAction extends AbstractChromiumAction {
    private final static Logger logger = LoggerFactory.getLogger(QFangWangAction.class);

    @Override
    protected Page doAction(Browser browser, Request request, Page page, Site site){
        //浏览器操作
        ThreadUtil.sleep(1500L);
        return page;
    }
}

puppeteer调用浏览器有2种方式:

一种是调用本地浏览器,一种是调用docker的一个headless镜像,区别在于docker的是已经提前开好了tab页面,只支持多开page,不支持多开browser。

本地浏览器也存在一个问题:当页面奔溃时,会产生残留的chromium进程,还有一些奔溃日志,需要进行清理。

由于我使用的服务器是window,这里给出window杀进程的命令:

taskkill -f -im chrome.exe

清除日志文件:

一般是在 AppData\Local\Temp 目录下,名称为puppetter_xxxxx_chrome_profile的文件夹。

 

有其他疑问可联系本人。

 

Puppeteer相关资料:

前端神器puppeteer入门及实践:

https://www.jianshu.com/p/56babda610f9

爬虫利器 Puppeteer 的一些最佳实践:

https://zhuanlan.zhihu.com/p/66296309

如何避免Puppeteer被前端JS检测/识别:

http://www.chenxm.cc/article/915.html

结合项目来谈谈 Puppeteer:

https://zhuanlan.zhihu.com/p/76237595

 

 

 

### Java使用Puppeteer进行网页自动化的集成方法 对于希望在Java项目中利用浏览器自动化功能的开发者来说,Jvppeteer是一个理想的选择[^1]。由于原生Puppeteer主要面向JavaScript环境,在Java环境中则推荐采用专门为Java设计并兼容Chrome DevTools Protocol的库——即Jvppeteer。 #### 添加依赖项 为了在Maven项目里引入Jvppeteer,需编辑`pom.xml`文件加入如下配置: ```xml <dependency> <groupId>com.github.kklisura.cdt</groupId> <artifactId>jvppeteer</artifactId> <version>0.9.8</version><!-- 版本号应根据实际情况调整 --> </dependency> ``` #### 初始化浏览器实例 创建一个新的类来管理与浏览器交互的过程。下面是一段简单的代码片段用于启动一个无头模式下的Chromium浏览器,并访问指定URL地址: ```java import com.github.kklisura.cdt.services.ChromeDevToolsService; import com.github.kklisura.cdt.services.impl.ChromeImpl; public class BrowserAutomation { public static void main(String[] args) throws Exception { // 创建新的浏览器服务对象 ChromeDevToolsService service = new ChromeImpl(); try (var browser = service.newBrowser()) { var page = browser.newPage(); // 打开新页面 // 设置视窗大小为全屏显示 page.setViewport(new Viewport().setWidth(1920).setHeight(1080)); // 访问目标网站 String url = "https://example.com"; page.navigate(url); System.out.println(page.title()); // 输出当前页面标题 } } } ``` 这段程序展示了如何初始化浏览器会话、设置窗口尺寸以及加载特定网址的内容。值得注意的是,这里还包含了获取已加载页面标题的功能作为示例操作之一。 #### 实现更复杂的交互逻辑 除了基本浏览外,还可以模拟用户输入、点击链接或提交表单等行为。例如,要在一个文本框内键入文字可以这样做: ```java // 假设有一个ID为'username'的<input>标签 page.type("#username", "testUser"); ``` 而如果想要触发某个按钮上的事件,则可以通过以下方式完成: ```java // 对于具有唯一选择器'.submit-btn'的<button>, 发起click动作 page.click(".submit-btn"); ``` 这些例子说明了怎样借助Jvppeteer提供的API接口来进行更加细致的操作控制。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值