当前位置: 代码网 > it编程>前端脚本>Python > 使用Python快速生成chrome插件相关文件结构

使用Python快速生成chrome插件相关文件结构

2024年11月16日 Python 我要评论
本文将详细分析一段用 wxpython 编写的 python 应用程序代码。该程序允许用户创建一些特定文件并将它们保存在指定的文件夹中,同时也能够启动 google chrome 浏览器并打开扩展页面

本文将详细分析一段用 wxpython 编写的 python 应用程序代码。该程序允许用户创建一些特定文件并将它们保存在指定的文件夹中,同时也能够启动 google chrome 浏览器并打开扩展页面,自动执行一些操作。

c:\pythoncode\new\crxiterationtaburl.py

全部代码

import wx
import os
import json
import subprocess
import time
import pyautogui
import pyperclip

class myapp(wx.app):
    def oninit(self):
        self.frame = myframe()
        self.frame.show()
        return true

class myframe(wx.frame):
    def __init__(self):
        super().__init__(parent=none, title='file creator', size=(850, 1600))
        panel = wx.panel(self)

        # 创建四个文本框
        self.memo1 = wx.textctrl(panel, style=wx.te_multiline | wx.te_process_enter, size=(300, 250))
        self.memo2 = wx.textctrl(panel, style=wx.te_multiline | wx.te_process_enter, size=(300, 250))
        self.memo3 = wx.textctrl(panel, style=wx.te_multiline | wx.te_process_enter, size=(300, 250))
        self.memo4 = wx.textctrl(panel, style=wx.te_multiline | wx.te_process_enter, size=(300, 250))
        # add labels with file names
        label1 = wx.statictext(panel, label='manifest.json:')
        label2 = wx.statictext(panel, label='background.js:')
        label3 = wx.statictext(panel, label='popup.html:')
        label4 = wx.statictext(panel, label='popup.js:')
        # 创建按钮
        self.create_button = wx.button(panel, label='创建')
        self.open_button = wx.button(panel, label='打开')

        # 布局
        # layout
        vbox = wx.boxsizer(wx.vertical)
        vbox.add(label1, flag=wx.expand | wx.all, border=10)
        vbox.add(self.memo1, flag=wx.expand | wx.all, border=10)
        vbox.add(label2, flag=wx.expand | wx.all, border=10)
        vbox.add(self.memo2, flag=wx.expand | wx.all, border=10)
        vbox.add(label3, flag=wx.expand | wx.all, border=10)
        vbox.add(self.memo3, flag=wx.expand | wx.all, border=10)
        vbox.add(label4, flag=wx.expand | wx.all, border=10)
        vbox.add(self.memo4, flag=wx.expand | wx.all, border=10)
        vbox.add(self.create_button, flag=wx.expand | wx.all, border=10)
        vbox.add(self.open_button, flag=wx.expand | wx.all, border=10)


        panel.setsizer(vbox)

        # 绑定事件
        self.create_button.bind(wx.evt_button, self.on_create)
        self.open_button.bind(wx.evt_button, self.on_open)

        self.target_folder = ''

        # 文件夹选择对话框
        with wx.dirdialog(self, "选择目标文件夹") as dlg:
            if dlg.showmodal() == wx.id_ok:
                self.target_folder = dlg.getpath()

    def on_create(self, event):
        if not self.target_folder:
            wx.messagebox("请先选择目标文件夹", "错误", wx.ok | wx.icon_error)
            return

        # 创建images文件夹
        images_folder = os.path.join(self.target_folder, "images")
        os.makedirs(images_folder, exist_ok=true)

        # 保存内容到文件
        with open(os.path.join(images_folder, "manifest.json"), 'w') as f:
            json.dump(self.memo1.getvalue(), f)

        with open(os.path.join(images_folder, "background.js"), 'w') as f:
            f.write(self.memo2.getvalue())

        with open(os.path.join(images_folder, "popup.html"), 'w') as f:
            f.write(self.memo3.getvalue())

        with open(os.path.join(images_folder, "popup.js"), 'w') as f:
            f.write(self.memo4.getvalue())

        wx.messagebox("文件已保存", "成功", wx.ok | wx.icon_information)

    def on_open(self, event):

        url = "chrome://extensions/"
        # copy the url to the clipboard
        pyperclip.copy(url)
        
        chrome_path = "c:/program files/google/chrome/application/chrome.exe"  # 请根据实际路径修改
        subprocess.popen([chrome_path, "chrome://extensions/"])        
        
        time.sleep(2)  # 等待chrome启动

        # 发送ctrl+shift+i
        pyautogui.hotkey('ctrl', 'shift', 'i')

if __name__ == '__main__':
    app = myapp()
    app.mainloop()

1. 程序结构概述

这段代码定义了一个 myapp 类作为 wxpython 应用的入口,继承自 wx.app 类。myframe 类继承自 wx.frame 类,用于创建界面。程序包括文本框、按钮、文件夹选择功能以及一些自动化操作。我们一一进行详细分析。

2. 导入所需模块

import wx
import os
import json
import subprocess
import time
import pyautogui
import pyperclip

wx:wxpython 是一个常用于创建图形用户界面(gui)的库,本代码利用它创建应用程序窗口、按钮、文本框等控件。

os:用于与操作系统交互,如创建文件夹和路径操作。

json:用于读写 json 格式的文件。

subprocess:用于启动外部应用程序,这里用来启动 chrome 浏览器。

time:用于延时操作。

pyautogui:一个自动化工具库,模拟键盘和鼠标事件,这里用来模拟快捷键操作。

pyperclip:用于剪贴板操作,本代码用来复制 chrome 扩展页面 url。

3. 创建应用程序框架

class myapp(wx.app):
    def oninit(self):
        self.frame = myframe()
        self.frame.show()
        return true

myapp 类继承自 wx.app,是整个应用程序的核心类。

oninit 方法在应用初始化时被调用,创建并显示 myframe 窗口。

4. 创建主窗口 myframe

class myframe(wx.frame):
    def __init__(self):
        super().__init__(parent=none, title='file creator', size=(850, 1600))
        panel = wx.panel(self)

myframe 类继承自 wx.frame,代表了应用程序的主窗口。

super().__init__(parent=none, title='file creator', size=(850, 1600)):初始化父类 wx.frame,并设置窗口的标题和大小。

panel = wx.panel(self):在窗口内添加一个面板,用来包含其他控件。

5. 添加控件

        self.memo1 = wx.textctrl(panel, style=wx.te_multiline | wx.te_process_enter, size=(300, 250))
        self.memo2 = wx.textctrl(panel, style=wx.te_multiline | wx.te_process_enter, size=(300, 250))
        self.memo3 = wx.textctrl(panel, style=wx.te_multiline | wx.te_process_enter, size=(300, 250))
        self.memo4 = wx.textctrl(panel, style=wx.te_multiline | wx.te_process_enter, size=(300, 250))

这四个 textctrl 控件分别用于输入四种类型的文本内容(json、js、html)。

wx.te_multiline 使得文本框支持多行文本,wx.te_process_enter 使得用户可以按 enter 键处理输入。

        label1 = wx.statictext(panel, label='manifest.json:')
        label2 = wx.statictext(panel, label='background.js:')
        label3 = wx.statictext(panel, label='popup.html:')
        label4 = wx.statictext(panel, label='popup.js:')

这些标签控件用于标识每个文本框的内容。

        self.create_button = wx.button(panel, label='创建')
        self.open_button = wx.button(panel, label='打开')

create_button 按钮用于创建文件,open_button 按钮用于打开 chrome 扩展页面。

6. 布局管理

        vbox = wx.boxsizer(wx.vertical)
        vbox.add(label1, flag=wx.expand | wx.all, border=10)
        vbox.add(self.memo1, flag=wx.expand | wx.all, border=10)
        vbox.add(label2, flag=wx.expand | wx.all, border=10)
        vbox.add(self.memo2, flag=wx.expand | wx.all, border=10)
        vbox.add(label3, flag=wx.expand | wx.all, border=10)
        vbox.add(self.memo3, flag=wx.expand | wx.all, border=10)
        vbox.add(label4, flag=wx.expand | wx.all, border=10)
        vbox.add(self.memo4, flag=wx.expand | wx.all, border=10)
        vbox.add(self.create_button, flag=wx.expand | wx.all, border=10)
        vbox.add(self.open_button, flag=wx.expand | wx.all, border=10)

使用 wx.boxsizer 来管理布局,vbox 采用垂直排列方式(wx.vertical)。

每个控件之间加入适当的间距(border=10)。

7. 文件夹选择对话框

        self.target_folder = ''
        with wx.dirdialog(self, "选择目标文件夹") as dlg:
            if dlg.showmodal() == wx.id_ok:
                self.target_folder = dlg.getpath()

通过 wx.dirdialog 弹出文件夹选择对话框,允许用户选择一个目标文件夹。选择后的路径保存在 self.target_folder 中。

8. 文件创建操作

    def on_create(self, event):
        if not self.target_folder:
            wx.messagebox("请先选择目标文件夹", "错误", wx.ok | wx.icon_error)
            return

on_create 方法会在用户点击“创建”按钮时被触发。首先检查是否选择了目标文件夹。

        images_folder = os.path.join(self.target_folder, "images")
        os.makedirs(images_folder, exist_ok=true)

在目标文件夹下创建 images 文件夹(如果不存在的话)。

        with open(os.path.join(images_folder, "manifest.json"), 'w') as f:
            json.dump(self.memo1.getvalue(), f)
        with open(os.path.join(images_folder, "background.js"), 'w') as f:
            f.write(self.memo2.getvalue())
        with open(os.path.join(images_folder, "popup.html"), 'w') as f:
            f.write(self.memo3.getvalue())
        with open(os.path.join(images_folder, "popup.js"), 'w') as f:
            f.write(self.memo4.getvalue())

将文本框中的内容保存为相应文件,分别保存为 manifest.json、background.js、popup.html、popup.js。

        wx.messagebox("文件已保存", "成功", wx.ok | wx.icon_information)

保存成功后弹出提示框。

9. 打开扩展页面并自动执行操作

    def on_open(self, event):
        url = "chrome://extensions/"
        pyperclip.copy(url)
        chrome_path = "c:/program files/google/chrome/application/chrome.exe"
        subprocess.popen([chrome_path, "chrome://extensions/"])        
        time.sleep(2)
        pyautogui.hotkey('ctrl', 'shift', 'i')

在 on_open 方法中,程序将打开 chrome 浏览器的扩展页面,并模拟快捷键 ctrl+shift+i 打开开发者工具。这些操作通过 pyperclip(复制 url)、subprocess(启动 chrome)、pyautogui(模拟快捷键)完成。

运行结果

总结

这段代码展示了如何使用 wxpython 创建一个简单的应用程序,完成以下功能:

创建指定格式的文件(如 manifest.json、background.js)。

启动 chrome 浏览器并打开扩展页面。

通过模拟键盘操作,自动化执行一些开发者工具的操作。

此应用程序展示了如何将文件操作、ui 设计和自动化脚本结合起来,构建一个具有实用功能的工具。如果你正在开发类似的应用程序,这段代码为你提供了一个很好的起点。

以上就是使用python快速生成chrome插件相关文件结构的详细内容,更多关于python生成chrome插件相关文件的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com