背景
事情是这样的,因为工作的重复率太高,我不得不开发一些脚本来 摸鱼 提高工作效率
但是问题是这样的
我在的单位内外网是隔离的,我所在的分支机构没有开发人员,总部有研发中心,但是并不会理会我们这些分支机构
内网的npm
私有库有一个很老的playwright@1.23.4
版本,而我的脚本需要用到一些比较新的特性
我拥有的设备
内网机:
统信UOS(主要跑脚本的机子)
Windows10(办公常用)
外网机:
Windows11
自己的设备:
MacOS(Intel版)
而不同版本的playwright
依赖的webdriver
又不一样
而我集齐了windows
,mac
,linux
三种设备。。。
这就意味着我不太好下载对应版本的ms-playwright
(总不能为了下载对应的webdriver
去装个虚拟机吧)
1.确认webdriver
放置的位置
2.如何获取不同系统的webdriver
首先,我们需要知道下载那些浏览器,以及这些浏览器的版本号和包名
我们可以通过
npx playwright install --help
或
pnpm dlx playwright install --help
查看可以安装的浏览器和版本
2.1 如何确定要安装哪些浏览器
其实这个要看你自己,因为在启动的代码有channel
指定需要用的浏览器
const browser = await chromium.launch({
headless: false,
// 使用edge浏览器
channel: 'msedge',
// 开启控制台。不然无法自动播放视频
devtools: true,
args: ["--start-maximized",]
});
一般是推荐下载chromium
firefox
webkit
这三个,基本能覆盖需求。
当然如果你不需要其中的某个,也可以不下载,实测是不会影响代码运行的。
2.2 确定当前playwright
依赖的webdriver
版本号
pnpm dlx playwright@version install webdriver
这里我以当前最新版本1.37.1
下载chromium
举例
pnpm dlx playwright@1.37.1 install chromium
可能看不太清,我复制出来
https://playwright.azureedge.net/builds/chromium/1076/chromium-mac.zip
可以通过这种方式,了解当前playwright
依赖的webdriver
版本,例如我这个就是1076
那么我只要下载对应的链接解压到ms-playwright
即可
2.3 那么如何下载其他系统需要的webdriver
呢?
除了用相关的系统以外,我们还可以通过查看源码的方式去确认其他系统的下载路径
源码地址:Github.playwright
文件路径:playwright/packages/playwright-core/src/server/registry/index.ts
这里就是我们下载的各种webdriver
路径了
我们可以看到,各种系统,还有各种版本
这时候可能还是不知道怎么查看,怎么办?
那我们可以先新建一个项目,然后下载playwright
作为依赖
在node_modules
里面找到playwright-core
,单独将它打开
这里因为我用的是pnpm
,路径都是link
的,所以我需要找到原项目
并用vscode
打开它
我们直接访问playwright-core/src/server/registry/index.ts
前面的解析过程比较无聊,无非是找关键字,判断系统啊,下载路径拼接之类的,我这里就直接跳过,只点出几个关键的地方
2.3.1 构造函数
关键在
Registry
的构造函数里
其中有一个_executables
所有最后构造出来的下载路径都被push到_executables
中了
因此我们到构造函数的末尾,添加一下_executables
的遍历打印,即可打印出所有的下载路径
// 打印所有下载路径
this._executables.forEach((item)=>{
console.log(item.downloadURLs?.[0]);
})
然后用vscode
启动当前这个index
文件
显而易见,所有的下载路径都被打印出来了
但是问题来了,我这都是当前系统的,其他系统的呢?
2.3.2 系统判断hostPlatform
地址:lib/utils/hostPlatform
系统判断都在这里,只保留自己需要的系统,注视掉其他的,重新运行即可。
例如我需要linux
的
重新运行
可以看到,路径都变成linux
的了
另外要注意芯片架构,arm的和非arm的自行注意哈
总结
最后总结一下各个版本可能需要的路径和包名,版本自行替换哈
域名可替换
'https://playwright.azureedge.net'
'https://playwright-akamai.azureedge.net'
'https://playwright-verizon.azureedge.net'
windows
https://playwright.azureedge.net/builds/chromium/1076/chromium-win64.zip
https://playwright.azureedge.net/builds/chromium/1076/chromium-with-symbols-win64.zip
https://playwright.azureedge.net/builds/chromium-tip-of-tree/1136/chromium-tip-of-tree-win64.zip
https://playwright.azureedge.net/builds/firefox/1422/firefox-win64.zip
https://playwright.azureedge.net/builds/firefox-beta/1422/firefox-beta-win64.zip
https://playwright.azureedge.net/builds/webkit/1883/webkit-win64.zip
https://playwright.azureedge.net/builds/ffmpeg/1009/ffmpeg-win64.zip
https://playwright.azureedge.net/builds/android/1000/android.zip
mac(Intel)
https://playwright.azureedge.net/builds/chromium/1076/chromium-mac.zip
https://playwright.azureedge.net/builds/chromium/1076/chromium-with-symbols-mac.zip
https://playwright.azureedge.net/builds/chromium-tip-of-tree/1136/chromium-tip-of-tree-mac.zip
https://playwright.azureedge.net/builds/firefox/1422/firefox-mac-13.zip
https://playwright.azureedge.net/builds/firefox/1422/firefox-asan-mac-13.zip
https://playwright.azureedge.net/builds/firefox-beta/1422/firefox-beta-mac-13.zip
https://playwright.azureedge.net/builds/webkit/1883/webkit-mac-13.zip
https://playwright.azureedge.net/builds/ffmpeg/1009/ffmpeg-mac.zip
https://playwright.azureedge.net/builds/android/1000/android.zip
linux
https://playwright.azureedge.net/builds/chromium/1076/chromium-linux.zip
https://playwright.azureedge.net/builds/chromium/1076/chromium-with-symbols-linux.zip
https://playwright.azureedge.net/builds/chromium-tip-of-tree/1136/chromium-tip-of-tree-linux.zip
https://playwright.azureedge.net/builds/firefox/1422/firefox-ubuntu-20.04.zip
https://playwright.azureedge.net/builds/firefox/1422/firefox-asan-ubuntu-20.04.zip
https://playwright.azureedge.net/builds/firefox-beta/1422/firefox-beta-ubuntu-20.04.zip
https://playwright.azureedge.net/builds/webkit/1883/webkit-ubuntu-20.04.zip
https://playwright.azureedge.net/builds/ffmpeg/1009/ffmpeg-linux.zip
https://playwright.azureedge.net/builds/android/1000/android.zip