使用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: #include<reg52.h> //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义void main (void) {P10xc0; //二进制 为 1100 0000 参考数码管排列,//可以得出0对应的段点…...
C#学习 - 初识类与名称空间
类(class)& 名称空间(namespace) 类是最基础的 C# 类型,是一个数据结构,是构成程序的主体 名称空间以树型结构组织类 using System; //前面的using就是引用名称空间 //相当于C语言的 #include <..…...
Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储
Ajax介绍 Ajax(Asynchronous JavaScript and XML)是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下,通过在后台与服务器进行数据交换,实时更新网页的一部分。Ajax的主要特点包括: 异步通…...
JavaScript的面向对象
一、认识对象 1.概述 对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。 什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合…...
MybatisPlus 核心功能 条件构造器 自定义SQL Service接口 静态工具
MybatisPlus 快速入门 常见注解 配置_软工菜鸡的博客-CSDN博客 2.核心功能 刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 2.1.条件构造器 除了新增以外,修改、删除、查询的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)各种类蔬菜的销售量分布、蔬菜种类与销售量之间的关系;2)各种类蔬菜的销售量的月份分布、各种类蔬菜销售量与月份之间的相关关系&a…...
5分钟 将“.py”文件转为“.pyd”文件
代码: 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异步和同步:客户端和服务器端相互通信的基础上 同步:客户端必须等待服务端的响应。在等待的期间客户端不能做其他操作。异步:客户端不需要等待服务器端的响应。在服务器…...
华为云云耀云服务器L实例评测|安装Java8环境 配置环境变量 spring项目部署 【!】存在问题未解决
目录 引出安装JDK8环境查看是否有默认jar上传Linux版本的jar包解压压缩包配置环境变量 上传jar包以及运行问题上传Jar包运行控制台开放端口访问失败—见问题记录关闭Jar的方式1.进程kill -92.ctrl c退出 问题记录:【!】未解决各种方式查看端口情况联系工程师最后排查…...
安卓多渠道打包(五)360加固walle多渠道打包
背景: 1、360加固宝,签名收費了,脚本上传加固也针对特定帐号才可实现。 内容 本文将会分享安卓项目中,使用360加固,再用walle签名,产出多渠道加固包的全流程。 环境 win10 jdk11 as2022 gradle7.5 最…...
Jmeter 实现 mqtt 协议压力测试
1. 下载jmeter,解压 https://jmeter.apache.org/download_jmeter.cgi 以 5.4.3 为例,下载地址: https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.zip linux下解压: unzip apache-jmeter-5.4.3.zip 2. 下载m…...
蓝桥杯官网练习题(凑算式)
类似填空题: ①算式900: https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501 ②九宫幻方③七星填数④幻方填空:https:/…...
机器学习实战-系列教程5:手撕线性回归4之非线性回归(项目实战、原理解读、源码解读)
🌈🌈🌈机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 手撕线性回归1之线性回归类的实现 手撕线性回归2之单特征线性回归 手撕线性回归3之多特征线性回归 手撕线性回归4之非线性回归 1…...
【C语言基础】那些你可能不知道的C语言“潜规则”
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
android framework之Applicataion启动流程分析(三)
现在再回顾一下Application的启动流程,总的来说,虽然进程的发起是由ATMS服务发起的,但是进程的启动还是由AMS负责,所以需要调用AMS的startProcess()接口完成进程启动流程,AMS要处理的事情很多,它将事务交给…...
使用Scrapy框架集成Selenium实现高效爬虫
引言: 在网络爬虫的开发中,有时候我们需要处理一些JavaScript动态生成的内容或进行一些复杂的操作,这时候传统的基于请求和响应的爬虫框架就显得力不从心了。为了解决这个问题,我们可以使用Scrapy框架集成Selenium来实现高效的爬…...
Maven 和 Gradle 官方文档及相关资料的网址集合
文章目录 官方MavenGradle 笔者MavenGradle 官方 Maven Maven 仓库依赖包官方查询通道:https://mvnrepository.com/ Maven 插件官方文档:https://maven.apache.org/plugins/ 安卓依赖包官方查询通道*:https://maven.google.com/web/ Gra…...
docker概念、安装与卸载
第一章 docker概念 Docker 是一个开源的应用容器引擎。 Docker 诞生于2013年初,基于 Go 语言实现,dotCloud 公司出品,后改名为 Docker Inc。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发…...
elasticsearch访问9200端口 提示需要登陆
项目场景: 提示:这里简述项目相关背景: elasticsearch访问9200端口 提示需要登陆 问题描述 提示:这里描述项目中遇到的问题: 在E:\elasticsearch-8.9.1-windows-x86_64\elasticsearch-8.9.1\bin目录下输入命令 ela…...
【深度学习】 Python 和 NumPy 系列教程(一):Python基本数据类型:1、数字(整数、浮点数)及相关运算;2、布尔值
目录 一、前言 二、实验环境 三、Python基本数据类型 1. 数字 a. 整数(int) b. 浮点数(float) c. 运算 运算符 增强操作符 代码整合 d. 运算中的类型转换 e. 运算函数abs、max、min、int、float 2. 布尔值(…...
无swing,高级javaSE毕业之贪吃蛇游戏(含模块构建,多线程监听服务)
JavaSE,无框架实现贪吃蛇 文章目录 JavaSE,无框架实现贪吃蛇1.整体思考2.可能的难点思考2.1 如何表示游戏界面2.2 如何渲染游戏界面2.3 如何让游戏动起来2.4 蛇如何移动 3.流程图制作4.模块划分5.模块完善5.0常量优化5.1监听键盘服务i.输入存储ii.键盘监…...
HDD-FAT32 ZIP-FAT32 HDD-FAT16 ZIP-FAT16 HDD-NTFS
FAT32、FAT16指的是分区格式, FAT16单个文件最大2G FAT32单个文件最大4G NTFS单个文件大于4G HDD是硬盘启动 ZIP是软盘启动 U盘选HDD HDD-NTFS...
王道数据结构编程题 二叉树
二叉树定义 以下为本文解题代码的二叉树定义。 struct TreeNode {int val;TreeNode* left, *right;TreeNode(int val 0, TreeNode* left nullptr, TreeNode* right nullptr): val(val), left(left), right(right) {} };非递归后序遍历 题目描述 编写后序遍历二叉树的非递…...
登录怎么实现的,密码加密了嘛?使用明文还是暗文,知道怎么加密嘛?
在Java中登录功能的实现通常包括以下步骤,其中密码应该以加密形式存储在数据库中,而不以明文形式存储,以增强安全性: 登录功能的实现步骤: 用户输入: 用户在登录页面上输入用户名和密码。 传输到服务器&a…...
Nginx和Tomcat负载均衡实现session共享
以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架。 此框架的优势: 1、支持Tomcat6和Tomcat7 2、操作粘性或不黏性Session 3、没有单点故障 4、T…...
【算法题】210. 课程表 II
题目: 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。 例如,想要学习课程 0 ,…...
“数据类型不一致”会走索引吗?
分析&回答 字符串类型的索引 id_1 varchar(20) NOT NULL这样下面两条语句的结果是一样的: SELECT * FROM ix_test WHERE id_11; SELECT * FROM ix_test WHERE id_11;执行计划是不同的: mysql> explain select * from ix_test where id_11; | 1 …...
html5手机网站/开发外包网站
一、算法实现 冒泡排序的时间复杂度为O(n^2),其实现代码如下: int bubble_sort(int *array, int num) {int i0, j0, idx0, max0;for(idx1; idx<num; idx){array[0] array[1]; /* array[0]为交换空间 */max num-idx1;for(j2…...
软件园二期做网站的公司/外贸seo优化公司
oracle 中的常量和变量:变量:通过变量,可以把需要的参数传递进来,经过处理后还可以把值传出去,最终返回给用户。常量:常量是代码中固化的信息,常量的值从定义开始就是固定的。常量主要用于为程序提供固定和…...
宁津华企动力做网站的电话多少/刷赞网站推广免费链接
作者:被偷De贼 Excel的导入一定给客户规定统一的模板,这样才能方便做业务处理. 我是这样做的. 首先将Excel的所有Sheet页全都读出来,请用户选择要处理的Sheet的页,获取Sheet页代码如下 Code/ // /// 获取Excel的表名[Sheet1$] /// ///…...
免费申请域名的步骤/免费培训seo网站
在做企业应用集成解决方案中,错误处理这一块是非常重要的一个环节,而相较于于自身原因导致的错误,调用远程服务时出现错误才是最让人头疼的,在人们发挥聪明才智总结出的各类解决方案中,重试无疑是最容易想到且实施的方…...
画册设计流程步骤/关键词优化seo费用
SQL 撤销索引、撤销表以及撤销数据库 通过使用 DROP 语句,可以轻松地删除索引、表和数据库。 DROP INDEX 语句 DROP INDEX 语句用于删除表中的索引。 用于 MS Access 的 DROP INDEX 语法: DROP INDEX index_name ON table_name 用于 MS SQL Server 的 DR…...
想做网站去哪里做/2345浏览器下载
一仅仅猴子第一天摘下若干个桃子,当即吃了一半,还只是瘾。又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见仅仅剩下一个桃子了。问&…...