electron获取元素xpath、pc端网页展示获取到的xpath、websocket给两端传值

本文介绍了如何使用Electron获取网页元素的XPath,并通过WebSocket实现实时通信。在 Electron 应用中,创建主窗口和子窗口,子窗口加载URL后捕获元素XPath。利用WebSocket在Electron和PC端之间传递数据,Vue应用监听WebSocket获取XPath值。同时,文章讨论了Electron应用的注册、多次打开以及判断首次打开的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求点:

1、打开任意网站,点击元素,获取元素xpath(这个在pc端就很难实现了,会涉及到跨域问题,所以用的electron)
2、获取的xpath需要回显到PC端网站,通过接口保存

思路:

1、electron实现获取xpath这一操作
2、pc端需要有 调起electron app 和 拿到 electron app 返回值的操作
3、传值
在传值上先后试过 mqtt、url+localstorage,mqtt因为延时,导致获取以后不能马上看到赋值,pass,url+localstorage就是electron app 通过打开一个新链接的方式跳转到pc,这样会每次打开一个新链接,并且涉及到要一直判断什么时候该保存,什么时候该清空,体验不太好,所以最后选择websocket

思路:

仅用于描述思路,代码不完整,不能直接使用

一、electron获取xpath

建2个窗口,主窗口通过 process.argv 获取 打开app时候的 参数,如果参数中包含url,则认为是pc端启动的app,这时候子窗口加载url地址,否则认为是单独启动app,这时候子窗口加载错误页面,提示需要pc端打开。
获取xpath用插件 (get-xpath

1、创建主窗口
win = new BrowserWindow({
   
    width: 1500,
    height: 1200,
    webPreferences: {
   
      webSecurity: true,
      webviewTag: true, // 开启webview
      nodeIntegration: true, // 启用 Node.js 集成
      preload: path.join(__dirname, "/static/js/preload.js"),
    },
  });
win.loadFile("./index.html");
2、创建子窗口并且setBrowserView到主窗口,子窗口默认加载error.html
view = new BrowserView({
   
    webPreferences: {
   
      webSecurity: true,
      webviewTag: true, // 开启webview
      nodeIntegration: true, // 启用 Node.js 集成
      preload: path.join(__dirname, "./static/js/capturePage.js"),
    },
  });
  view.setBounds({
   
    x: 0,
    y: 0,
    width: 1500,
    height: 1200,
    horizontal: true,
    vertical: true,
  });
  winWebContents = win.webContents;
  viewWebContents = view.webContents;
  win.setBrowserView(view);
  viewWebContents.loadFile("./error.html");
3、如果获取到了url,就加载url
if (par && par.href && par.orderId && par.targetHref) {
   
   viewWebContents.loadURL(par.href);
}
4、获取xpath并传递

上方代码有个(preload: path.join(__dirname, “./static/js/capturePage.js”) 在这里新建一个capturePage.js文件,文件里的功能需要实现:a.引入插件; b.拦截加载页面的原生点击事件;c.给点击事件加效果;d.传递获取到的xpath给主进程

const {
    ipcRenderer } = require("electron");
const getXPath = require("get-xpath");

// 高亮的样式
const cla = "clickClass";
const style = "background:#ffeded;outline:2px dashed #ff5050;";
// box-sizing:border-box!important;
// 清空并初始化元素
function initDom(cla) {
   
  const body = document.querySelector("html");
  const allChoosedDom = body.querySelectorAll(`.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值