Puppeter 如何链接控制 Electron 创建的窗口

news/2025/3/5 21:53:24/文章来源:https://www.cnblogs.com/maoylblog/p/18753789

大家好,我是一名,跨境行业 saas 软件开发的前端程序员,阿毛

这个我的个人网站

最近想用 Electron 做一个爬虫,想到用 Puppeter 来控制 Electron 创建的窗口执行爬取任务。
网上找了很多方法都不好用, 最后发现一个库可以链接 Electron 和 Puppeter , 这里分享一下

puppeteer-in-electron

这是我的页面 就一个按钮

const Index = () => {const ipcRenderer = window.electron.ipcRenderer;function open() {ipcRenderer.send("openBaidu");}return (<div className="w-full h-full flex justify-center items-center"><Button onClick={() => open()}>打开百度</Button></div>);
};

这是主进程的方法

这是主进程的方法 createPupPage 我做了一个简单的处理,
传入一个 url ,通过 Electron 创建一个窗口 ,通过 puppeteer 接管后 返回 page,
然后输入 DeepSeek 点击确定 然后等待 1 秒, 最后截图

ipcMain.on("openBaidu", async () => {console.log("pong");const page = await createPupPage({ loadURL: "https://www.baidu.com/" });await page.type("#kw", "DeepSeek");await page.click("#su");await wait(1000);await page.screenshot({ path: "baidu.png" });
});

createPupPage 相关代码

import { app, BrowserWindow } from "electron";
import puppeteer, { Page } from "puppeteer-core";
const pie = require("puppeteer-in-electron");let browser = null;export function getBrowser(): unknown {return browser;
}
export async function init(): Promise<void> {await pie.initialize(app);browser = await pie.connect(app, puppeteer);
}
export async function createPupPage(data: {loadURL: string;options?: Electron.BrowserWindowConstructorOptions;
}): Promise<Page> {const window = new BrowserWindow(data.options);const url = data.loadURL;await window.loadURL(url);const page: Page = await pie.getPage(browser, window);return page;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件工程日报03

今天练习了springboot技术,写了一个用户注册的功能(只写了后端代码) 首先创建了boot项目,pom文件继承了spring-boot-starter-parent依赖管理,大部分不需要自己配置 之后再yml文件中写数据库的配置然后创建项目结构,和之前类似,实现注册功能。 主要步骤就是定义实现类Use…

Ubuntu 平台上火焰图的生成和分析

火焰图的生成和分析 Ubuntu 平台的火焰图生成 在 Ubuntu 平台上,安装 FlameGraph 到 FlameGraph 目录下。运行想要生成火焰图的进程 top 获取需要生成火焰图的进程号 按照下面的脚本输入命令#!/bin/bash echo "please input pid" read processid echo "your pr…

【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

1.算法仿真效果 本文是之前写的文章:《基于FPGA的4FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR》的硬件测试版本。在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:(完整代码运行后…

智能客服支持助手

customer_support_assistant https://github.com/jiangnanboy/customer_support_assistant 1.简介 customer_support_assistant是智能客服支持助手项目,利用LLM对Query的理解,去调用相应函数,实现智能客服功能。 本项目具体的功能为根据用户的查询,利用deepseek去理解查询并…

UPFC统一潮流控制器的simulink建模与仿真

1.课题概述UPFC统一潮流控制器的simulink建模与仿真。能够在不增加输电线路物理容量的情况下,显著提高电力系统的传输能力和稳定性。UPFC能够同时控制输电线路的有功功率、无功功率以及节点电压,具有调节系统潮流分布、提高系统稳定性和改善电压质量等重要作用。2.系统仿真结…

人员离岗预警系统为人员值班保驾护航

人员离岗监测预警系统设备。系统设备实现对机场值班室工作人员进行24小时离岗监测预警,当值班工作人员离开超过规定时间,系统设备监测到及时推送告警信息到监控室管理平台和手机端通知管理人员及时处理,将事后取证变为事前预警。人员离岗监测预警系统设备。系统设备实现对机…

OpenVX节点执行独立性

节点执行独立性 在如图2-5所示例中,客户端根据输入图像、梯度幅度和梯度相位。OpenVX并不要求并行运行,但可以由OpenVX供应商实现。图2-5 具有一些独立节点的简单图形。 构造这种图形的代码,如下所示。 vx_context context = vxCreateContext(); vx_image images[] = {vxCre…

kettle插件-高性能插入更新插件Upsert

场景:假如T日需要将a表中T-1日的数据同步到b表。由于某种业务需求a表中已经同步到b表中的数据发生了变化需要重新同步,这个时候就会用到插入更新插件,也就是 说a表中数据重新同步b表,若b表中存在此数据(根据唯一id)则执行更新操作,否则执行插入操作。 1、软硬件环境 本次…

kettle插件-高性能插入更新组件Upsert

场景:假如T日需要将a表中T-1日的数据同步到b表。由于某种业务需求a表中已经同步到b表中的数据发生了变化需要重新同步,这个时候就会用到插入更新插件,也就是 说a表中数据重新同步b表,若b表中存在此数据(根据唯一id)则执行更新操作,否则执行插入操作。 1、软硬件环境 本次…

周界人员入侵预系统保障工厂生产安全

工厂生产车间区域不能有人闯入机器人生产区域,如果有人员闯入生产区域,周界人员入侵预警摄像机监测识别到有人进入,系统设备现场联动语音告警,提醒人员禁止进入,同时将告警抓拍的图像传输到厂区二楼监控室,监控室电脑报警弹窗,提醒管理人员监看,从而保障美的工厂车间安…

探秘Transformer系列之(10)--- 自注意力

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(10)--- 自注意力 目录探秘Transformer系列之(10)--- 自注意力0x0…