当前位置: 首页 > news >正文

使用playright自动下载vscode已安装插件

import os
import re
import subprocess
import traceback
from playwright.sync_api import Playwright, sync_playwright, expect# 执行CMD命令
cmd_command = "code --list-extensions"  # 获取已安装扩展列表
process = subprocess.Popen(cmd_command, stdout=subprocess.PIPE, shell=True)# 获取命令结果
output, error = process.communicate()pluginList = []
# 输出结果
if error:print(f"错误: {error}")raise Exception(error)
else:res = output.decode('utf-8')pluginList = res.split('\n')print(f"命令输出: \n{res}")# pluginList = [
#     '766b.go-outliner',
# 'aaron-bond.better-comments',
# 'achil.vscode-javascript-repl',
# 'aksharpatel47.vscode-flutter-helper',
# 'albymor.increment-selection',
# 'alefragnani.project-manager',
# 'alexisvt.flutter-snippets',
# 'Angular.ng-template',
# 'AykutSarac.jsoncrack-vscode',
# 'batisteo.vscode-django',
# 'bierner.color-info',
# 'BriteSnow.vscode-toggle-quotes',
# 'ChakrounAnas.turbo-console-log',
# 'changkaiyan.tf2snippets',
# 'checkmarx.ast-results',
# 'christian-kohler.npm-intellisense',
# 'christian-kohler.path-intellisense',
# 'chrmarti.regex',
# 'cipchk.zh-hans-tt-hant-vscode',
# 'circlecodesolution.ccs-flutter-color',
# 'codezombiech.gitignore',
# 'cssho.vscode-svgviewer',
# 'csstools.postcss',
# 'Dart-Code.dart-code',
# 'Dart-Code.flutter',
# 'dbaeumer.vscode-eslint',
# 'devzstudio.emoji-snippets',
# 'docsmsft.docs-markdown',
# 'docsmsft.docs-yaml',
# 'donjayamanne.git-extension-pack',
# 'donjayamanne.githistory',
# 'donjayamanne.python-environment-manager',
# 'donjayamanne.python-extension-pack',
# 'DotJoshJohnson.xml',
# 'eamodio.gitlens',
# 'ecmel.vscode-html-css',
# 'EditorConfig.EditorConfig',
# 'esbenp.prettier-vscode',
# 'felipecaputo.git-project-manager',
# 'FelixAngelov.bloc',
# 'firefox-devtools.vscode-firefox-debug',
# 'flesler.url-encode',
# 'folke.vscode-monorepo-workspace',
# 'formulahendry.auto-close-tag',
# 'formulahendry.auto-rename-tag',
# 'formulahendry.code-runner',
# 'fwcd.kotlin',
# 'gamunu.vscode-yarn',
# 'gaoliang.visual-zookeeper',
# 'GitHub.remotehub',
# 'golang.go',
# 'HarryHopkinson.vs-code-runner',
# 'hediet.debug-visualizer',
# 'helixquar.randomeverything',
# 'hollowtree.vue-snippets',
# 'huangjianke.fish-redux-template',
# 'humao.rest-client',
# 'ivangabriele.vscode-git-add-and-commit',
# 'IWANABETHATGUY.vue-this-store',
# 'JFrog.jfrog-vscode-extension',
# 'johnpapa.angular-essentials',
# 'johnpapa.Angular2',
# 'johnpapa.vscode-peacock',
# 'johnpapa.winteriscoming',
# 'KevinRose.vsc-python-indent',
# 'Kimseungtae.aicodehelper',
# 'lihui.vs-color-picker',
# 'magicstack.MagicPython',
# 'marlon407.code-groovy',
# 'mathiasfrohlich.Kotlin',
# 'MellowMarshmallow.groovy',
# 'mhutchie.git-graph',
# 'mindaro-dev.file-downloader',
# 'mindaro.mindaro',
# 'ms-azuretools.vscode-docker',
# 'MS-CEINTL.vscode-language-pack-zh-hans',
# 'ms-edgedevtools.vscode-edge-devtools',
# 'ms-kubernetes-tools.vscode-kubernetes-tools',
# 'ms-mssql.data-workspace-vscode',
# 'ms-mssql.mssql',
# 'ms-mssql.sql-bindings-vscode',
# 'ms-mssql.sql-database-projects-vscode',
# 'ms-ossdata.vscode-postgresql',
# 'ms-playwright.playwright',
# 'ms-python.autopep8',
# 'ms-python.black-formatter',
# 'ms-python.flake8',
# 'ms-python.isort',
# 'ms-python.pylint',
# 'ms-python.python',
# 'ms-python.vscode-pylance',
# 'ms-toolsai.jupyter',
# 'ms-toolsai.jupyter-keymap',
# 'ms-toolsai.jupyter-renderers',
# 'ms-toolsai.vscode-jupyter-cell-tags',
# 'ms-toolsai.vscode-jupyter-slideshow',
# 'ms-vscode-remote.remote-containers',
# 'ms-vscode-remote.remote-ssh',
# 'ms-vscode-remote.remote-ssh-edit',
# 'ms-vscode-remote.remote-wsl',
# 'ms-vscode-remote.vscode-remote-extensionpack',
# 'ms-vscode.azure-account',
# 'ms-vscode.azure-repos',
# 'ms-vscode.cmake-tools',
# 'ms-vscode.cpptools-extension-pack',
# 'ms-vscode.cpptools-themes',
# 'ms-vscode.hexeditor',
# 'ms-vscode.live-server',
# 'ms-vscode.powershell',
# 'ms-vscode.remote-explorer',
# 'ms-vscode.remote-repositories',
# 'ms-vscode.remote-server',
# 'ms-vscode.wordcount',
# 'msyrus.go-doc',
# 'Nash.awesome-flutter-snippets',
# 'Natizyskunk.sftp',
# 'NicolasVuillamy.vscode-groovy-lint',
# 'njpwerner.autodocstring',
# 'overtrue.miniapp-helper',
# 'PKief.material-icon-theme',
# 'Postman.postman-for-vscode',
# 'redhat.java',
# 'redhat.vscode-commons',
# 'redhat.vscode-yaml',
# 'ritwickdey.LiveServer',
# 'rogalmic.bash-debug',
# 'sdras.vue-vscode-snippets',
# 'tauri-apps.tauri-vscode',
# 'techer.open-in-browser',
# 'thekalinga.bootstrap4-vscode',
# 'twxs.cmake',
# 'vadimcn.vscode-lldb',
# 'vahidk.tensorflow-snippets',
# 'vformAdmin.vform-maker',
# 'VisualStudioExptTeam.intellicode-api-usage-examples',
# 'VisualStudioExptTeam.vscodeintellicode',
# 'VisualStudioExptTeam.vscodeintellicode-completions',
# 'vmware.vscode-boot-dev-pack',
# 'vmware.vscode-spring-boot',
# 'vscjava.vscode-gradle',
# 'vscjava.vscode-java-debug',
# 'vscjava.vscode-java-dependency',
# 'vscjava.vscode-java-pack',
# 'vscjava.vscode-java-test',
# 'vscjava.vscode-maven',
# 'vscjava.vscode-spring-boot-dashboard',
# 'vscjava.vscode-spring-initializr',
# 'Vue.volar',
# 'Vue.vscode-typescript-vue-plugin',
# 'waderyan.gitblame',
# 'WallabyJs.console-ninja',
# 'wellchang.fishreduxhelper',
# 'wellchang.fonttodartts',
# 'wholroyd.jinja',
# 'wowbox.code-debuger',
# 'Wscats.eno',
# 'xabikos.JavaScriptSnippets',
# 'yzane.markdown-pdf',
# 'yzhang.markdown-all-in-one',
# 'Zignd.html-css-class-completion',
# 'ziyasal.vscode-open-in-github']# 判断是否已下载
def isExsit(prefix):# 指定目录directory = os.getcwd()# 正则表达式匹配文件名pattern = prefix + '-.*\.vsix$'  # 这将匹配所有.vsix文件# 遍历目录for filename in os.listdir(directory):# 如果文件名匹配正则表达式if re.match(pattern, filename):# 拼接完整的文件路径file_path = os.path.join(directory, filename)# 如果文件存在if os.path.exists(file_path):# print(f'文件 {file_path} 存在')return Trueelse:# print(f'文件 {file_path} 不存在')return Falsedef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False, timeout=1200 * 1000.0)# 设置页面查找元素的超时时间为 5 秒browser.locator_timeout = 5000context = browser.new_context()context.set_default_timeout(5000)page = context.new_page()page.set_default_timeout(5000)failList = []for plugin in pluginList:try:# 判断文件是否存在if not isExsit(plugin):# print(plugin + ".vsix文件存在")# else:page.goto("https://marketplace.visualstudio.com/search?term="+plugin+"&target=VSCode&category=All%20categories&sortBy=Relevance", wait_until='commit')page.wait_for_timeout(300)first = page.locator('xpath=/html/body/div[2]/div[3]/div[3]/div/div/div[2]/div[2]/div[2]/div/div/div/div/a/div')first.click()# page.goto("https://marketplace.visualstudio.com/items?itemName=" + plugin, wait_until='commit')page.wait_for_timeout(300)ele = page.get_by_role("button", name="Version History")ele.click()page.wait_for_timeout(300)ele.click()page.wait_for_timeout(1000)version = page.locator("#version-history-tab-content div table tbody tr").nth(0).locator('td').nth(0).inner_text()page.wait_for_timeout(300)with page.expect_download() as download_info:# page.locator("xpath=/html/body/div[4]/div/div/div[2]/div/div/div[2]/div/div/div/div[2]/div[2]/div[2]/div/div[2]/table/tbody/tr[1]/td[3]/a").click()page.locator("#version-history-tab-content div table tbody tr").nth(0).locator('a').nth(0).click()download = download_info.value# Wait for the download process to completeprint(download.path())# Save downloaded file somewheredownload.save_as(plugin + "-" + version + ".vsix")# breakexcept Exception as e:failList.append(plugin)print(plugin + ".vsix下载失败")print(e)# traceback.print_exc()# ---------------------context.close()browser.close()print('下载失败扩展列表:')print(failList)with sync_playwright() as playwright:run(playwright)

相关文章:

使用playright自动下载vscode已安装插件

import os import re import subprocess import traceback from playwright.sync_api import Playwright, sync_playwright, expect# 执行CMD命令 cmd_command "code --list-extensions" # 获取已安装扩展列表 process subprocess.Popen(cmd_command, stdoutsubpr…...

单片机语言实例:2、点亮数码管的多种方法

一、共阳数码管静态显示 程序实例1&#xff1a; #include<reg52.h> //包含头文件&#xff0c;一般情况不需要改动&#xff0c; //头文件包含特殊功能寄存器的定义void main (void) {P10xc0; //二进制 为 1100 0000 参考数码管排列&#xff0c;//可以得出0对应的段点…...

C#学习 - 初识类与名称空间

类&#xff08;class&#xff09;& 名称空间&#xff08;namespace&#xff09; 类是最基础的 C# 类型&#xff0c;是一个数据结构&#xff0c;是构成程序的主体 名称空间以树型结构组织类 using System; //前面的using就是引用名称空间 //相当于C语言的 #include <..…...

Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储

Ajax介绍 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下&#xff0c;通过在后台与服务器进行数据交换&#xff0c;实时更新网页的一部分。Ajax的主要特点包括&#xff1a; 异步通…...

JavaScript的面向对象

一、认识对象 1.概述 对象&#xff08;object&#xff09;是 JavaScript 语言的核心概念&#xff0c;也是最重要的数据类型。 什么是对象&#xff1f;简单说&#xff0c;对象就是一组“键值对”&#xff08;key-value&#xff09;的集合&#xff0c;是一种无序的复合数据集合…...

MybatisPlus 核心功能 条件构造器 自定义SQL Service接口 静态工具

MybatisPlus 快速入门 常见注解 配置_软工菜鸡的博客-CSDN博客 2.核心功能 刚才的案例中都是以id为条件的简单CRUD&#xff0c;一些复杂条件的SQL语句就要用到一些更高级的功能了。 2.1.条件构造器 除了新增以外&#xff0c;修改、删除、查询的SQL语句都需要指定where条件。因此…...

TSN时间敏感网络

目录 时间敏感网络介绍 子协议介绍 时间同步 IEEE802.1AS 调度和流量整形 IEEE802.1Q IEEE802.1Qbv IEEE802.1cr IEEE802.1Qbu IEEE802.1Qch IEEE802.1Qav IEEE802.1Qcc 纠错机制与安全 IEEE802.1Qci IEEE802.1CB IEEE802.1Qca 参考 时间敏感网络介绍 TSN(Tim…...

【2023年数学建模国赛】C题解题思路

第一问 要求分析分析蔬菜各品类及单品销售量的分布规律及相互关系。该问题可以拆分成三个角度进行剖析。 1&#xff09;各种类蔬菜的销售量分布、蔬菜种类与销售量之间的关系&#xff1b;2&#xff09;各种类蔬菜的销售量的月份分布、各种类蔬菜销售量与月份之间的相关关系&a…...

5分钟 将“.py”文件转为“.pyd”文件

代码&#xff1a; from distutils.core import setup from distutils.extension import Extension from Cython.Build import cythonize import osfile_list os.listdir("./") extensions [] for file in file_list:if file.endswith(".py") and file !…...

python 入门到精通(一)

文章目录 1.使用pycharm进行第一个程序的编写2.python基础语法篇2.1 常用的值类型2.2 注释2.3 变量2.4 数据类型2.5 数据类型转换2.6 什么是标识符2.7 运算符2.8 字符串扩展2.8.1 字符串拼接2.8.2 字符串格式化2.8.3 格式化的精度控制2.8.4 字符串格式化 - 快速写法2.8.5 字符串…...

AJAX (Asynchronous JavaScript And XML)异步的JavaScript 和 XML

1、概念 Asynchronous JavaScript And XML 异步的JavaScript 和 XML异步和同步&#xff1a;客户端和服务器端相互通信的基础上 同步&#xff1a;客户端必须等待服务端的响应。在等待的期间客户端不能做其他操作。异步&#xff1a;客户端不需要等待服务器端的响应。在服务器…...

华为云云耀云服务器L实例评测|安装Java8环境 配置环境变量 spring项目部署 【!】存在问题未解决

目录 引出安装JDK8环境查看是否有默认jar上传Linux版本的jar包解压压缩包配置环境变量 上传jar包以及运行问题上传Jar包运行控制台开放端口访问失败—见问题记录关闭Jar的方式1.进程kill -92.ctrl c退出 问题记录&#xff1a;【!】未解决各种方式查看端口情况联系工程师最后排查…...

安卓多渠道打包(五)360加固walle多渠道打包

背景&#xff1a; 1、360加固宝&#xff0c;签名收費了&#xff0c;脚本上传加固也针对特定帐号才可实现。 内容 本文将会分享安卓项目中&#xff0c;使用360加固&#xff0c;再用walle签名&#xff0c;产出多渠道加固包的全流程。 环境 win10 jdk11 as2022 gradle7.5 最…...

Jmeter 实现 mqtt 协议压力测试

1. 下载jmeter&#xff0c;解压 https://jmeter.apache.org/download_jmeter.cgi 以 5.4.3 为例&#xff0c;下载地址&#xff1a; https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.zip linux下解压&#xff1a; unzip apache-jmeter-5.4.3.zip 2. 下载m…...

蓝桥杯官网练习题(凑算式)

类似填空题&#xff1a; ①算式900&#xff1a; https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501 ②九宫幻方③七星填数④幻方填空&#xff1a;https:/…...

机器学习实战-系列教程5:手撕线性回归4之非线性回归(项目实战、原理解读、源码解读)

&#x1f308;&#x1f308;&#x1f308;机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 手撕线性回归1之线性回归类的实现 手撕线性回归2之单特征线性回归 手撕线性回归3之多特征线性回归 手撕线性回归4之非线性回归 1…...

【C语言基础】那些你可能不知道的C语言“潜规则”

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

android framework之Applicataion启动流程分析(三)

现在再回顾一下Application的启动流程&#xff0c;总的来说&#xff0c;虽然进程的发起是由ATMS服务发起的&#xff0c;但是进程的启动还是由AMS负责&#xff0c;所以需要调用AMS的startProcess()接口完成进程启动流程&#xff0c;AMS要处理的事情很多&#xff0c;它将事务交给…...

使用Scrapy框架集成Selenium实现高效爬虫

引言&#xff1a; 在网络爬虫的开发中&#xff0c;有时候我们需要处理一些JavaScript动态生成的内容或进行一些复杂的操作&#xff0c;这时候传统的基于请求和响应的爬虫框架就显得力不从心了。为了解决这个问题&#xff0c;我们可以使用Scrapy框架集成Selenium来实现高效的爬…...

Maven 和 Gradle 官方文档及相关资料的网址集合

文章目录 官方MavenGradle 笔者MavenGradle 官方 Maven Maven 仓库依赖包官方查询通道&#xff1a;https://mvnrepository.com/ Maven 插件官方文档&#xff1a;https://maven.apache.org/plugins/ 安卓依赖包官方查询通道*&#xff1a;https://maven.google.com/web/ Gra…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...