Playwright 浏览器管理指南:浏览器安装、多浏览器测试配置与自定义下载源
本文围绕 Playwright 官方文档中的 Browsers 主题展开:Playwright 每个版本都依赖特定版本的浏览器二进制文件,本文完整覆盖浏览器的安装方式(CLI 各语言版本)、系统依赖安装、定期更新策略、多浏览器/多设备/品牌浏览器(Chrome、Edge)的测试配置,以及代理与私有制品仓库下的下载策略、浏览器缓存目录管理与垃圾回收机制,并结合当前仓库源码(浏览器注册表、CLI 安装实现)说明其底层工作原理,帮助你在本地开发与 CI 环境中完整地掌控 Playwright 的浏览器生命周期。
浏览器版本与 Playwright 版本的绑定关系
每个 Playwright 版本都需要特定版本的浏览器二进制文件才能运行,必须使用 Playwright CLI 来安装这些浏览器。Playwright 在每次发布时都会更新其支持的浏览器版本,使得最新版本始终跟进最新的浏览器。这意味着每次升级 Playwright 之后,你可能需要重新执行 install CLI 命令。
这一绑定关系由仓库根部的浏览器清单文件 browsers.json 定义,其中每个浏览器条目包含 revision(Playwright 内部修订号)、browserVersion(上游版本)、installByDefault 等字段。以当前仓库为例:
{
"comment": "Do not edit this file, use utils/roll_browser.js",
"browsers": [
{ "name": "chromium", "revision": "1244", "installByDefault": true,
"browserVersion": "154.0.8037.0", "title": "Chrome for Testing" },
{ "name": "chromium-headless-shell", "revision": "1244", "installByDefault": true,
"browserVersion": "154.0.8037.0", "title": "Chrome Headless Shell" },
{ "name": "firefox", "revision": "1543", "installByDefault": true,
"browserVersion": "155.0", "title": "Firefox" },
{ "name": "webkit", "revision": "2360", "installByDefault": true,
"browserVersion": "26.6", "title": "WebKit" },
{ "name": "ffmpeg", "revision": "1011", "installByDefault": true },
{ "name": "winldd", "revision": "1007", "installByDefault": false },
{ "name": "android", "revision": "1001", "installByDefault": "false" }
]
}
从该文件可以看到:
- 默认安装(不带参数的
install)会下载installByDefault: true的浏览器:chromium、chromium-headless-shell、firefox、webkit 和 ffmpeg(用于视频录制); chromium与chromium-headless-shell是两个独立条目,分别对应有头(headed)运行和无头(headless)运行,这正是后文--only-shell/--no-shell两个选项的作用对象;- WebKit 条目支持
revisionOverrides(例如针对 macOS 14 的固定修订号),源码中当使用到 override 时会提示该浏览器为“冻结构建”,这一点可以在 registry 源码中看到。
使用 CLI 安装浏览器
Playwright 可以安装其支持的浏览器。不带参数运行命令时,会安装默认的浏览器集合:
npx playwright install
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
playwright install
pwsh bin/Debug/netX/playwright.ps1 install
也可以通过参数安装指定浏览器:
npx playwright install webkit
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install webkit"
playwright install webkit
pwsh bin/Debug/netX/playwright.ps1 install webkit
查看所有受支持的浏览器:
npx playwright install --help
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --help"
playwright install --help
pwsh bin/Debug/netX/playwright.ps1 install --help
从源码看 install 命令的完整选项
CLI 的 install 命令定义在 program.ts 中,其全部选项如下:
| 选项 | 作用 |
|---|---|
--with-deps |
同时安装浏览器所需的系统依赖 |
--dry-run |
只打印将执行的信息,不实际安装 |
--list |
列出机器上所有 Playwright 安装所安装的浏览器 |
--force |
强制重装已安装的浏览器 |
--only-shell |
安装 chromium 时只安装 headless shell |
--no-shell |
不安装 chromium headless shell |
--no-progress |
不显示下载进度条 |
--no-remove |
安装完成后不移除未使用的浏览器 |
命令的帮助文本还给出了自定义浏览器安装的示例:
- $ install
Install default browsers.
- $ install chrome firefox
Install custom browsers, supports chromium, firefox, webkit, chromium-headless-shell.
这些选项最终汇聚到 installBrowsers 函数,其执行流程为:
- 若检测到
--no-shell与--only-shell同时出现则直接报错(互斥); - 通过
registry.resolveBrowsers(args, { shell })解析出目标可执行文件;--only-shell会过滤掉完整 chromium、--no-shell会过滤掉 headless shell,对应逻辑见 _defaultBrowsersToInstall; --with-deps时先调用registry.installDeps;--dry-run模式下逐项打印下载标题、安装位置与下载 URL(含 fallback 镜像);- 否则调用
registry.install执行下载,并在结束后校验宿主系统依赖(Linux 下通过 ldd、Windows 下通过 winldd 校验缺失的动态库)。
安装动作本身(registry.install)还有几个从源码结构看值得注意的细节:
- 并发锁:安装前会在浏览器缓存目录创建
__dirlock锁文件(使用 exponential back-off 重试 20 次),因此多个进程并行执行install时不会互相破坏缓存;若锁长期被占用,源码会明确提示可手动删除锁文件; - hermetic 提示:对品牌浏览器(如系统安装的 Chrome/Edge)这类非 hermetic 安装,若检测到已有安装,源码会打印醒目提示,要求先关闭正在运行的浏览器实例再使用
install --force <name>重装; - 垃圾回收触发点:
install过程中只要未传--no-remove且未设置PLAYWRIGHT_SKIP_BROWSER_GC,就会先执行缓存校验并删除陈旧浏览器(下文详述)。
通过 .NET API 调用 CLI
对于 C#,还可以直接通过 .NET API 运行命令行工具:
var exitCode = Microsoft.Playwright.Program.Main(new[] {"install"});
if (exitCode != 0)
{
throw new Exception($"Playwright exited with code {exitCode}");
}
安装系统依赖(install-deps)
系统依赖可以自动安装,这对 CI 环境非常有用:
npx playwright install-deps
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install-deps"
playwright install-deps
pwsh bin/Debug/netX/playwright.ps1 install-deps
也可以为单个浏览器安装依赖:
npx playwright install-deps chromium
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install-deps chromium"
playwright install-deps chromium
pwsh bin/Debug/netX/playwright.ps1 install-deps chromium
还可以把 install-deps 与 install 组合,用一条命令同时安装浏览器和系统依赖:
npx playwright install --with-deps chromium
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --with-deps chromium"
playwright install --with-deps chromium
pwsh bin/Debug/netX/playwright.ps1 install --with-deps chromium
支持的操作系统见 系统要求说明。
补充一个源码中的隐藏选项:install-deps --dry-run 可以只报告缺失的系统依赖而不修改系统,Linux 下会以非零退出码退出,适合放在非交互式的验证脚本中使用(定义见 program.ts)。
定期更新 Playwright
保持 Playwright 版本最新,能让你使用新特性、在最新浏览器版本上测试应用,并在浏览器正式发布前就捕获兼容性问题:
# Update playwright
npm install -D @playwright/test@latest
# Install new browsers
npx playwright install
查看发布说明可了解最新版本与变更内容:
# See what version of Playwright you have by running the following command
npx playwright --version
配置浏览器:在不同浏览器上运行测试
Playwright 可以在 Chromium、WebKit、Firefox 浏览器上运行测试,也可以运行 Google Chrome、Microsoft Edge 等品牌浏览器,还支持模拟平板和移动设备。完整的桌面、平板、移动设备参数表见仓库中的设备描述清单(该文件包含每台设备的 userAgent、viewport、deviceScaleFactor、isMobile、hasTouch、defaultBrowserType 等字段,例如 Pixel 5、iPhone 12、Desktop Chrome 等条目都定义在此)。
在多个浏览器上运行测试(JavaScript)
通过在配置中设置 projects,可以让 Playwright 在多个浏览器和配置上运行测试,也可以为每个项目设置不同的选项:
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
/* Test against desktop browsers */
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
/* Test against mobile viewports. */
{
name: 'Mobile Chrome',
use: { ...devices['Pixel 5'] },
},
{
name: 'Mobile Safari',
use: { ...devices['iPhone 12'] },
},
/* Test against branded browsers. */
{
name: 'Google Chrome',
use: { ...devices['Desktop Chrome'], channel: 'chrome' }, // or 'chrome-beta'
},
{
name: 'Microsoft Edge',
use: { ...devices['Desktop Edge'], channel: 'msedge' }, // or 'msedge-dev'
},
],
});
Playwright 默认会运行所有项目:
npx playwright test
Running 7 tests using 5 workers
✓ [chromium] › example.spec.ts:3:1 › basic test (2s)
✓ [firefox] › example.spec.ts:3:1 › basic test (2s)
✓ [webkit] › example.spec.ts:3:1 › basic test (2s)
✓ [Mobile Chrome] › example.spec.ts:3:1 › basic test (2s)
✓ [Mobile Safari] › example.spec.ts:3:1 › basic test (2s)
✓ [Google Chrome] › example.spec.ts:3:1 › basic test (2s)
✓ [Microsoft Edge] › example.spec.ts:3:1 › basic test (2s)
使用 --project 命令行选项只运行单个项目:
npx playwright test --project=firefox
Running 1 test using 1 worker
✓ [firefox] › example.spec.ts:3:1 › basic test (2s)
使用 VS Code 扩展时,可以在 Playwright 侧边栏勾选浏览器名称旁的复选框来选择在不同浏览器上运行测试。这些名称就定义在 Playwright 配置文件的 projects 部分;初始化安装时的默认配置会给出 3 个项目:Chromium、Firefox 和 WebKit,默认选中第一个项目。
要在多个项目(浏览器)上运行测试,分别勾选项目名称旁的复选框即可。
在多个浏览器上运行测试(Python)
运行特定浏览器:
pytest test_login.py --browser webkit
运行多个浏览器:
pytest test_login.py --browser webkit --browser firefox
测试移动视口:
pytest test_login.py --device="iPhone 13"
测试品牌浏览器:
pytest test_login.py --browser-channel msedge
在多个浏览器上运行测试(Java)
运行特定浏览器:
import com.microsoft.playwright.*;
public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
// Launch chromium, firefox or webkit.
Browser browser = playwright.chromium().launch();
Page page = browser.newPage();
// ...
}
}
}
基于环境变量 BROWSER 在多个浏览器之间切换:
import com.microsoft.playwright.*;
public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
Browser browser = null;
String browserName = System.getenv("BROWSER");
if (browserName.equals("chromium")) {
browser = playwright.chromium().launch();
} else if (browserName.equals("firefox")) {
browser = playwright.firefox().launch();
} else if (browserName.equals("webkit")) {
browser = playwright.webkit().launch();
}
Page page = browser.newPage();
// ...
}
}
}
在多个浏览器上运行测试(.NET)
运行特定浏览器:
dotnet test -- Playwright.BrowserName=webkit
要在多个浏览器或配置上运行测试,需要多次调用 dotnet test:指定 BROWSER 环境变量,或通过 runsettings 文件设置 Playwright.BrowserName:
dotnet test --settings:chromium.runsettings
dotnet test --settings:firefox.runsettings
dotnet test --settings:webkit.runsettings
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<Playwright>
<BrowserName>chromium</BrowserName>
</Playwright>
</RunSettings>
Chromium
版本策略
对于 Google Chrome、Microsoft Edge 及其他 Chromium 系浏览器,Playwright 默认使用开源 Chromium 构建。由于 Chromium 项目领先于品牌浏览器——当世界还在使用 Google Chrome N 时,Playwright 已经支持将在数周后随 Google Chrome 和 Microsoft Edge 发布的 Chromium N+1。这意味着用默认配置测试可以提前发现未来版本才会暴露的问题。
Chromium headless shell
Playwright 同时提供常规 Chromium 构建(用于有头操作)和独立的 chromium headless shell(用于无头模式)。
如果你的测试只跑 headless shell(即未指定 channel 选项,例如在 CI 上),可以通过 --only-shell 避免下载完整的 Chromium 浏览器:
# only running tests headlessly
npx playwright install --with-deps --only-shell
# only running tests headlessly
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --with-deps --only-shell"
# only running tests headlessly
playwright install --with-deps --only-shell
# only running tests headlessly
pwsh bin/Debug/netX/playwright.ps1 install --with-deps --only-shell
从源码看(_defaultBrowsersToInstall),--only-shell 会把默认安装列表中的 chromium 条目过滤掉、只保留 chromium-headless-shell;--no-shell 则反之。
Chromium 新无头模式(new headless mode)
可以通过使用 'chromium' channel 选择新无头模式。官方 Chrome 文档的描述是:
New Headless 是真正的 Chrome 浏览器,因此更真实、更可靠、功能也更全。这使得它更适合高精度的端到端 Web 应用测试或浏览器扩展测试。
相关细节见 Playwright 的 issue #33566。各语言启用方式:
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'], channel: 'chromium' },
},
],
});
import com.microsoft.playwright.*;
public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setChannel("chromium"));
Page page = browser.newPage();
// ...
}
}
}
pytest test_login.py --browser-channel chromium
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<Playwright>
<BrowserName>chromium</BrowserName>
<LaunchOptions>
<Channel>chromium</Channel>
</LaunchOptions>
</Playwright>
</RunSettings>
dotnet test -- Playwright.BrowserName=chromium Playwright.LaunchOptions.Channel=chromium
使用新无头模式时,可以在安装浏览器时用 --no-shell 选项跳过 headless shell 的下载:
# only running tests headlessly
npx playwright install --with-deps --no-shell
# only running tests headlessly
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --with-deps --no-shell"
# only running tests headlessly
playwright install --with-deps --no-shell
# only running tests headlessly
pwsh bin/Debug/netX/playwright.ps1 install --with-deps --no-shell
Google Chrome 与 Microsoft Edge
Playwright 虽然可以下载并使用最新的 Chromium 构建,但也可以操作机器上已安装的品牌浏览器 Google Chrome 和 Microsoft Edge(注意 Playwright 默认不会替你安装它们)。当前 Playwright 版本支持这些浏览器的 Stable 与 Beta 通道。
可用的 channel 为 chrome、msedge、chrome-beta、msedge-beta、chrome-dev、msedge-dev、chrome-canary、msedge-canary。这份通道列表在源码 chromiumChannels.ts 中以“channel → 各平台默认用户数据目录”的映射形式维护,用于定位品牌浏览器的安装与用户数据目录。
注意:某些企业浏览器策略(Enterprise Browser Policies)可能影响 Playwright 启动和控制 Google Chrome / Microsoft Edge 的能力;在带浏览器策略的环境中运行不在 Playwright 项目的支持范围之内。
注意:Google Chrome 和 Microsoft Edge 已切换到更接近常规有头模式的新无头模式实现(此处不保留外链,可搜索“Chrome headless shell”官方博客了解背景),这与 Playwright 默认无头模式使用的 chromium headless shell 不同,某些情况下会有行为差异。详见 issue #33566。
各语言指定品牌浏览器的写法:
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
/* Test against branded browsers. */
{
name: 'Google Chrome',
use: { ...devices['Desktop Chrome'], channel: 'chrome' }, // or 'chrome-beta'
},
{
name: 'Microsoft Edge',
use: { ...devices['Desktop Edge'], channel: 'msedge' }, // or "msedge-beta" or 'msedge-dev'
},
],
});
import com.microsoft.playwright.*;
public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
// Channel can be "chrome", "msedge", "chrome-beta", "msedge-beta" or "msedge-dev".
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setChannel("msedge"));
Page page = browser.newPage();
// ...
}
}
}
pytest test_login.py --browser-channel msedge
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<Playwright>
<BrowserName>chromium</BrowserName>
<LaunchOptions>
<Channel>msedge</Channel>
</LaunchOptions>
</Playwright>
</RunSettings>
dotnet test -- Playwright.BrowserName=chromium Playwright.LaunchOptions.Channel=msedge
Python 中若直接使用库,可在启动浏览器时指定 channel 参数:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# Channel can be "chrome", "msedge", "chrome-beta", "msedge-beta" or "msedge-dev".
browser = p.chromium.launch(channel="msedge")
page = browser.new_page()
page.goto("https://playwright.dev")
print(page.title())
browser.close()
安装 Google Chrome 与 Microsoft Edge
如果机器上没有 Google Chrome 或 Microsoft Edge,可以用 Playwright 命令行工具安装:
npx playwright install msedge
playwright install msedge
pwsh bin/Debug/netX/playwright.ps1 install msedge
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install msedge"
注意:Playwright 安装 Google Chrome / Microsoft Edge 时会安装到操作系统的全局默认位置,覆盖当前已有的浏览器安装。
运行 --help 可查看可安装的浏览器完整列表。
什么时候用、什么时候不用 Google Chrome / Microsoft Edge
默认建议:大多数情况下,使用 Playwright 默认的最新版 Chromium 是更好的选择。由于 Playwright 领先于浏览器的 Stable 通道,它能保证即将发布的 Google Chrome / Microsoft Edge 版本不会打破你的站点——可以提前发现破坏性问题,并在官方 Chrome 更新之前有充足时间修复。
回归测试:一些测试策略要求对当前公开发布的浏览器做回归测试。这种情况下可以选用稳定通道 "chrome" 或 "msedge"。
媒体编解码器:使用官方二进制测试的另一个理由是验证与媒体编解码器相关的功能。出于各种许可与协议原因,开源 Chromium 不包含 Google Chrome / Microsoft Edge 捆绑的全部编解码器。如果站点依赖这类编解码器(比较少见),也应使用官方 channel。
企业策略:Google Chrome 和 Microsoft Edge 遵循企业策略,其中可能包含限制能力、强制代理、强制扩展等会妨碍测试的设置。若你所在的组织使用这类策略,本地测试建议用捆绑的 Chromium,而 CI 机器人(通常不受此类限制)上可以选用稳定通道。
Firefox
Playwright 的 Firefox 版本匹配最新的 Firefox Stable 构建。由于 Playwright 的 Firefox 依赖打补丁的构建,因此无法使用品牌版 Firefox。
某些严重依赖底层平台的特性,其可用性在不同操作系统间可能存在差异,例如可用的媒体编解码器在 Linux、macOS 和 Windows 之间差异很大。
WebKit
Playwright 的 WebKit 派生自最新的 WebKit 主分支源码,往往在这些更新并入 Apple Safari 及其他 WebKit 系浏览器之前就可用,这为应对潜在的浏览器更新问题提供了充裕的反应时间。由于 Playwright 的 WebKit 依赖打补丁的构建,它无法使用品牌版 Safari;替代方案是使用最新的 WebKit 构建进行测试。
同样,平台相关的特性(如媒体编解码器)在不同系统上可用性差异很大。虽然 Linux CI 上运行 WebKit 通常成本最低,但要获得最接近 Safari 的体验,应在 macOS 上运行 WebKit——例如做视频播放测试时。
通过防火墙或代理安装
默认情况下,Playwright 从微软 CDN 下载浏览器。
有些公司会维护阻断公共资源直接访问的内部代理。此时可以让 Playwright 通过代理服务器下载浏览器(设置 HTTPS_PROXY):
HTTPS_PROXY=https://192.0.2.1 npx playwright install
set HTTPS_PROXY=https://192.0.2.1
npx playwright install
$Env:HTTPS_PROXY="https://192.0.2.1"
npx playwright install
pip install playwright
HTTPS_PROXY=https://192.0.2.1 playwright install
set HTTPS_PROXY=https://192.0.2.1
pip install playwright
playwright install
$Env:HTTPS_PROXY="https://192.0.2.1"
pip install playwright
playwright install
HTTPS_PROXY=https://192.0.2.1 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
set HTTPS_PROXY=https://192.0.2.1
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
$Env:HTTPS_PROXY="https://192.0.2.1"
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
HTTPS_PROXY=https://192.0.2.1 pwsh bin/Debug/netX/playwright.ps1 install
set HTTPS_PROXY=https://192.0.2.1
pwsh bin/Debug/netX/playwright.ps1 install
$Env:HTTPS_PROXY="https://192.0.2.1"
pwsh bin/Debug/netX/playwright.ps1 install
如果代理请求被一个自定义的、不受信任的证书颁发机构(CA)拦截,下载浏览器时出现 Error: self signed certificate in certificate chain,则必须在安装浏览器之前通过 NODE_EXTRA_CA_CERTS 环境变量设置自定义根证书:
export NODE_EXTRA_CA_CERTS="/path/to/cert.pem"
set NODE_EXTRA_CA_CERTS="C:\certs\root.crt"
$Env:NODE_EXTRA_CA_CERTS="C:\certs\root.crt"
如果网络连接 Playwright 浏览器仓库较慢,可以用 PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT(毫秒)增大连接超时:
PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000 npx playwright install
set PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000
npx playwright install
$Env:PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT="120000"
npx playwright install
pip install playwright
PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000 playwright install
set PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000
pip install playwright
playwright install
$Env:PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT="120000"
pip install playwright
playwright install
PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
set PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
$Env:PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT="120000"
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000 pwsh bin/Debug/netX/playwright.ps1 install
set PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000
pwsh bin/Debug/netX/playwright.ps1 install
$Env:PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT="120000"
pwsh bin/Debug/netX/playwright.ps1 install
从源码注释可以确认一个易被误解的细节(registry/index.ts):PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT 这个名字其实是一个 misnomer,它实际控制的是下载的 socket 最大空闲超时(max idle timeout),因向后兼容原因未改名。
如果在 Linux 上安装系统依赖且需要使用代理,请确保以 root 用户运行命令;否则 Playwright 会尝试提权为 root,而不会把 HTTPS_PROXY 这类环境变量传递给 Linux 包管理器:
sudo HTTPS_PROXY=https://192.0.2.1 npx playwright install-deps
sudo HTTPS_PROXY=https://192.0.2.1 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install-deps"
sudo HTTPS_PROXY=https://192.0.2.1 playwright install-deps
sudo HTTPS_PROXY=https://192.0.2.1 pwsh bin/Debug/netX/playwright.ps1 install-deps
从私有制品仓库下载
默认情况下,Playwright 从微软 CDN 下载浏览器。
有些公司会维护内部制品仓库来托管浏览器二进制文件。此时可以用 PLAYWRIGHT_DOWNLOAD_HOST 环境变量让 Playwright 从自定义位置下载:
PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 npx playwright install
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
npx playwright install
$Env:PLAYWRIGHT_DOWNLOAD_HOST="http://192.0.2.1"
npx playwright install
pip install playwright
PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 playwright install
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
pip install playwright
playwright install
$Env:PLAYWRIGHT_DOWNLOAD_HOST="http://192.0.2.1"
pip install playwright
playwright install
PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
$Env:PLAYWRIGHT_DOWNLOAD_HOST="http://192.0.2.1"
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 pwsh bin/Debug/netX/playwright.ps1 install
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
pwsh bin/Debug/netX/playwright.ps1 install
$Env:PLAYWRIGHT_DOWNLOAD_HOST="http://192.0.2.1"
pwsh bin/Debug/netX/playwright.ps1 install
还可以使用按浏览器划分的下载主机环境变量 PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST、PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST 和 PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST,它们的优先级高于 PLAYWRIGHT_DOWNLOAD_HOST:
PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3 PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 npx playwright install
set PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
npx playwright install
$Env:PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST="http://203.0.113.3"
$Env:PLAYWRIGHT_DOWNLOAD_HOST="http://192.0.2.1"
npx playwright install
pip install playwright
PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3 PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 playwright install
set PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
pip install playwright
playwright install
$Env:PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST="http://203.0.113.3"
$Env:PLAYWRIGHT_DOWNLOAD_HOST="http://192.0.2.1"
pip install playwright
playwright install
PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3 PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
set PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
$Env:PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST="http://203.0.113.3"
$Env:PLAYWRIGHT_DOWNLOAD_HOST="http://192.0.2.1"
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3 PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 pwsh bin/Debug/netX/playwright.ps1 install
set PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
pwsh bin/Debug/netX/playwright.ps1 install
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
