跳至主要内容

浏览器

简介

Playwright 的每个版本都需要特定版本的浏览器二进制文件才能运行。您需要使用 Playwright CLI 来安装这些浏览器。

Playwright 在每次发布时都会更新其支持的浏览器版本,因此最新版本的 Playwright 将始终支持最新版本的浏览器。这意味着每次您更新 Playwright 时,您可能都需要重新运行 install CLI 命令。

安装浏览器

Playwright 可以安装支持的浏览器。运行没有参数的命令将安装默认浏览器。

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"

您还可以通过提供参数来安装特定浏览器

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install webkit"

查看所有支持的浏览器

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --help"

安装系统依赖项

系统依赖项可以自动安装。这对于 CI 环境很有用。

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install-deps"

您还可以通过将其作为参数传递来安装单个浏览器的依赖项

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install-deps chromium"

还可以将 install-depsinstall 结合使用,以便使用单个命令安装浏览器和操作系统依赖项。

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --with-deps chromium"

查看 系统要求,了解官方支持的操作系统。

配置浏览器

Playwright 可以运行测试,测试对象包括 Chromium、WebKit 和 Firefox 浏览器以及 Google Chrome 和 Microsoft Edge 等品牌浏览器。它还可以运行模拟平板电脑和移动设备。

在不同的浏览器上运行测试

在特定浏览器上运行测试

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();
// ...
}
}
}

Chromium

对于 Google Chrome、Microsoft Edge 和其他基于 Chromium 的浏览器,Playwright 默认使用开源 Chromium 构建。由于 Chromium 项目领先于品牌浏览器,当全世界都在使用 Google Chrome N 时,Playwright 已经支持 Chromium N+1,该版本将在几周后发布到 Google Chrome 和 Microsoft Edge 中。

Google Chrome 和 Microsoft Edge

虽然 Playwright 可以下载并使用最新的 Chromium 构建,但它可以在机器上可用的品牌 Google Chrome 和 Microsoft Edge 浏览器上运行(请注意,Playwright 默认不会安装它们)。特别是,当前版本的 Playwright 将支持这些浏览器的稳定版和测试版频道。

可用的频道有 chromemsedgechrome-betamsedge-betamsedge-dev

警告

某些企业浏览器策略可能会影响 Playwright 启动和控制 Google Chrome 和 Microsoft Edge 的能力。在使用浏览器策略的环境中运行超出了 Playwright 项目的范围。

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();
// ...
}
}
}

安装 Google Chrome 和 Microsoft Edge

如果您的机器上没有 Google Chrome 或 Microsoft Edge,您可以使用 Playwright 命令行工具安装它们

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install msedge"
警告

Google Chrome 或 Microsoft Edge 安装将安装在您操作系统的默认全局位置,覆盖您当前的浏览器安装。

使用 --help 选项运行以查看可安装浏览器的完整列表。

何时使用 Google Chrome 和 Microsoft Edge,何时不使用?

默认值

在大多数情况下,使用默认的 Playwright 配置以及最新的 Chromium 是一个好主意。由于 Playwright 领先于浏览器的稳定版频道,因此您可以放心,即将发布的 Google Chrome 或 Microsoft Edge 版本不会破坏您的网站。您可以尽早发现问题,并在官方 Chrome 更新之前有足够的时间修复问题。

回归测试

话虽如此,测试策略通常要求针对当前公开可用的浏览器执行回归测试。在这种情况下,您可以选择使用其中一个稳定版频道,"chrome""msedge"

媒体编解码器

使用官方二进制文件进行测试的另一个原因是测试与媒体编解码器相关的功能。由于各种许可考虑和协议,Chromium 没有 Google Chrome 或 Microsoft Edge 捆绑的所有编解码器。如果您的网站依赖于此类编解码器(这种情况很少见),您还需要使用官方频道。

企业策略

Google Chrome 和 Microsoft Edge 尊重企业策略,其中包括对功能、网络代理、强制扩展的限制,这些限制会阻碍测试。因此,如果您属于使用此类策略的组织,最简单的方法是使用捆绑的 Chromium 进行本地测试,您仍然可以在通常不受此类限制影响的机器人上选择使用稳定版频道。

Firefox

Playwright 的 Firefox 版本与最近的 Firefox 稳定版 构建相匹配。Playwright 不适用于 Firefox 的品牌版本,因为它依赖于补丁。

请注意,某些功能的可用性(严重依赖于底层平台)可能因操作系统而异。例如,可用的媒体编解码器在 Linux、macOS 和 Windows 之间存在很大差异。

WebKit

Playwright 的 WebKit 来源于最新的 WebKit 主分支源代码,通常在这些更新被整合到 Apple Safari 和其他基于 WebKit 的浏览器之前。这为应对潜在的浏览器更新问题提供了大量的前置时间。Playwright 不适用于 Safari 的品牌版本,因为它依赖于补丁。相反,您可以使用最新的 WebKit 构建进行测试。

请注意,某些功能的可用性(严重依赖于底层平台)可能因操作系统而异。例如,可用的媒体编解码器在 Linux、macOS 和 Windows 之间存在很大差异。虽然在 Linux CI 上运行 WebKit 通常是最实惠的选择,但为了获得最接近 Safari 的体验,您应该在 Mac 上运行 WebKit,例如,如果您要进行视频播放。

在防火墙或代理后面安装

默认情况下,Playwright 从 Microsoft 的 CDN 下载浏览器。

有时,公司会维护内部代理来阻止直接访问公共资源。在这种情况下,可以配置 Playwright 通过代理服务器下载浏览器。

HTTPS_PROXY=https://192.0.2.1 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"

如果代理请求被自定义不受信任的证书颁发机构 (CA) 拦截,并且在下载浏览器时导致 Error: self signed certificate in certificate chain,则必须通过 NODE_EXTRA_CA_CERTS 环境变量设置自定义根证书,然后再安装浏览器

export NODE_EXTRA_CA_CERTS="/path/to/cert.pem"

如果您的网络连接到 Playwright 浏览器存档的速度很慢,您可以使用 PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT 环境变量(以毫秒为单位)增加连接超时时间

PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"

如果您正在 安装依赖项 并且需要在 Linux 上使用代理,请确保以 root 用户身份运行命令。否则,Playwright 将尝试成为 root 用户,并且不会将 HTTPS_PROXY 等环境变量传递给 Linux 包管理器。

sudo HTTPS_PROXY=https://192.0.2.1 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install-deps"

从工件存储库下载

默认情况下,Playwright 从 Microsoft 的 CDN 下载浏览器。

有时,公司会维护内部工件存储库来托管浏览器二进制文件。在这种情况下,可以使用 PLAYWRIGHT_DOWNLOAD_HOST 环境变量配置 Playwright 从自定义位置下载。

PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"

还可以使用 PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOSTPLAYWRIGHT_FIREFOX_DOWNLOAD_HOSTPLAYWRIGHT_WEBKIT_DOWNLOAD_HOST 环境变量指定每个浏览器的下载主机,这些变量优先于 PLAYWRIGHT_DOWNLOAD_HOST

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"

管理浏览器二进制文件

Playwright 会将 Chromium、WebKit 和 Firefox 浏览器下载到特定于操作系统的缓存文件夹中。

  • Windows 上的 %USERPROFILE%\AppData\Local\ms-playwright
  • macOS 上的 ~/Library/Caches/ms-playwright
  • Linux 上的 ~/.cache/ms-playwright

这些浏览器安装后会占用数百兆字节的磁盘空间。

du -hs ~/Library/Caches/ms-playwright/*
281M chromium-XXXXXX
187M firefox-XXXX
180M webkit-XXXX

您可以使用环境变量覆盖默认行为。安装 Playwright 时,让它将浏览器下载到特定位置。

PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"

运行 Playwright 脚本时,让它在共享位置搜索浏览器。

PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers mvn test

Playwright 会跟踪需要这些浏览器的软件包,并在您将 Playwright 更新到较新版本时将其垃圾回收。

注意

开发人员可以通过在 .bashrc 中导出 PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers 来选择此模式。

跳过浏览器下载

在某些情况下,希望完全避免浏览器下载,因为浏览器二进制文件是单独管理的。

这可以通过在安装之前设置 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD 变量来实现。

PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 mvn test

过时的浏览器删除

Playwright 会跟踪使用其浏览器的客户端。当不再有客户端需要特定版本的浏览器时,该版本将从系统中删除。这样,您可以安全地使用不同版本的 Playwright 实例,同时不会浪费磁盘空间来存储不再使用的浏览器。

要选择退出未使用的浏览器删除,可以设置 PLAYWRIGHT_SKIP_BROWSER_GC=1 环境变量。

卸载浏览器

这将删除当前 Playwright 安装的浏览器(chromium、firefox、webkit)。

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="uninstall"

要删除其他 Playwright 安装的浏览器,请传递 --all 标志。

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="uninstall --all"