chrome插件自动重打包

chrome插件重打包目前发现两种方案,一种是用selenium模拟鼠标操作重打包,一种是使用chrome运行参数重打包

方法一、使用chrome.exe重打包

进入chrome目录下,一般在C:\Program Files\Google\Chrome\Application目录下,使用以下命令重打包

chrome.exe --pack-extension=C:\extension --pack-extension-key=C:\extension.pem
  • --pack-extension=插件文件夹路径,打包以后的crx会放在插件文件夹路径同级目录下
  • --pack-extension-key=插件密钥路径,可以为空,会自动在插件文件夹路径同级目录下生成一个密钥

方法二、使用selenium对chrome插件进行自动重打包

chrome插件的拓展程序页使用Shadow DOM(影子DOM)和Shadow Root(影子根)
无法用常规selenium手段获取页面dom元素进行操作,因此使用execute_script的形式执行js操作元素
使用time.sleep(3)目的是为了方便调试时看清操作,实际使用可以酌情删除

import time
from selenium import webdriver

def main():
    driver = webdriver.Chrome()

    try:
        driver.get("chrome://extensions/")
        driver.implicitly_wait(10)
        time.sleep(3)
        # 执行 JavaScript 代码来获取 shadow DOM 中的内容
        # 开启开发者模式
        driver.execute_script('''
            var toggle = document.querySelector('extensions-manager').shadowRoot
                         .querySelector('extensions-toolbar').shadowRoot
                         .querySelector('cr-toolbar').querySelector('cr-toggle');
            toggle.click();
            
        ''')
        time.sleep(3)
        # 点击打包按钮
        driver.execute_script('''
            var button = document.querySelector('extensions-manager').shadowRoot
                         .querySelector('extensions-toolbar').shadowRoot
                         .querySelector('cr-button[id="packExtensions"]');
            button.click();
        ''')
        time.sleep(3)

        dialog_code = '''
            var dialog = document.querySelector('extensions-manager').shadowRoot
                 .querySelector('extensions-toolbar').shadowRoot
                 .querySelector('extensions-pack-dialog').shadowRoot
                 .querySelector('cr-dialog').shadowRoot;
        '''

        # 输入路径
        path = r"此处是插件路径"
        driver.execute_script(f'''
            {dialog_code}

            var body = dialog.querySelector('slot[name="body"]').assignedElements()[0];
            var crInput = body.querySelector('cr-input#rootDir').shadowRoot;
            var input = crInput.querySelector('input#input')
            
            input.value = arguments[0];
            input.dispatchEvent(new Event('input', {{ bubbles: true }}));
        ''', path)
        time.sleep(3)

        # 点击打包按钮
        driver.execute_script(f'''
            {dialog_code}
                         
            var container = dialog.querySelector('slot[name="button-container"]').assignedElements()[0];
            var action = container.querySelector('cr-button.action-button').shadowRoot;
            var button = action.querySelector('#content');
            button.click();
        ''')

        time.sleep(3)
    except Exception as e:
        print(f"Error getting: {e}")
        driver.save_screenshot("screenshot/error.png")
    finally:
        driver.quit()


if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder-movers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值