Electron中脚本注入实践

前言

Electron基于Chromium所以可以像浏览器一样加载任何第三方网页,并且其可以对网页注入脚本,将JavaScript代码注入到目标网页中并执行就像网页开发者自己开发的一样。脚本注入后可以访问该页面内的任何内容,包括网页的样式、服务端接口、Cookie等,并且你注入的脚本还可以通过Node.js访问系统资源,例如可以将网页中获取的资源直接保存到本地磁盘中。

脚本注入实践

1.通过preload文件注入脚本

首先使用Vue CLI Plugin Electron Builder创建Electron项目。

启动Electron项目

在background.js中修改代码,直接加载'https://www.baidu.com',并且在new BrowserWindow中添加preload属性。

// background.js
const path = require('path')  
const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
      contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,
      preload: path.join(__dirname, 'preload.js')
    }
  })
  win.loadURL('https://www.baidu.com')

直接加载百度首页

在src文件夹下创建proload.js文件,再在项目根目录下创建vue.config.js配置文件,并添加配置。

// vue.config.js
module.exports = {
    pluginOptions: {
        electronBuilder: {
            preload: 'src/preload.js'
        }
    }
}

在preload.js文件中添加注入的脚本代码。

// preload.js
document.addEventListener('DOMContentLoaded', (event) => {
    // 页面内容加载之后需要引入的一些操作
    const searchButton = document.getElementById('su') // 获取搜索按钮元素
    searchButton.onclick = function (e) {
        e.preventDefault() // 阻止搜索按钮默认事件
        console.log('移动云 更安全 更智慧')
    };
})

脚本代码获取搜索按钮元素,修改按钮颜色,阻止按钮点击的默认事件,并修改为在控制台打印出“移动云 更安全 更智慧”。

脚本注入成功

以上便实现了通过preload文件的代码注入。

2.通过executeJavaScript方法注入脚本

对于只需要简单地注入一两句代码的情况,可以直接调用webContents的executeJavaScript方法即可。

win.webContents.executeJavaScript('alert("this is a test!");')

通过executeJavaScript方法实现脚本注入

结语

Electron脚本注入的作用非常大,当我们访问一个网页但不能控制从网络中读取到的页面内容,这时使用脚本注入便提供了可能性,使得可以满足一些神奇的需求。


来源:

移动云开发者社区icon-default.png?t=LA23https://ecloud.10086.cn/api/query/developer/user/home.html#L2FwaS9xdWVyeS9kZXZlbG9wZXIvYmxvZy9ibG9nZGV0YWlsLmh0bWw/YmxvZ19pZD1mNWQzZTNlM2M3NzA0MGRiOGE4YmU4MDc5ZmU2N2VhZA==

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Electron 是一种跨平台的桌面应用程序开发工具,可以使用它调用 Python 脚本。具体步骤如下: 1. 首先需要安装 Node.js 和 Electron。 2. 在 Electron 项目使用 Node.js 的 child_process 模块来启动 Python 脚本。例如: ```javascript const { spawn } = require('child_process'); const pyProg = spawn('python', ['./path/to/script.py']); pyProg.stdout.on('data', function(data) { console.log(data.toString()); }); ``` 这个例子会启动一个名为 `script.py` 的 Python 脚本,并将其标准输出打印到控制台。 3. 在 Python 脚本使用标准输入和输出来与 Electron 交互。例如: ```python import sys # 从标准输入读取数据 input_str = sys.stdin.read() # 处理数据 output_str = "Hello, " + input_str # 将结果写入标准输出 sys.stdout.write(output_str) ``` 这个例子会将从标准输入读取的字符串加上前缀 "Hello, ",然后将结果写入标准输出。 4. 在 Electron 读取 Python 脚本的输出。例如: ```javascript const { spawn } = require('child_process'); const pyProg = spawn('python', ['./path/to/script.py']); pyProg.stdout.on('data', function(data) { console.log(data.toString()); // 在这里处理 Python 脚本的输出 }); ``` 这个例子会在控制台输出 Python 脚本的输出,并在回调函数处理它。 以上就是在 Electron 调用 Python 脚本的基本步骤。需要注意的是,这种方法并不太安全,因为 Python 脚本可以执行任意代码,可能会造成安全问题。如果需要调用 Python 脚本,最好使用安全的方式来进行。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值