浏览器
简介
每个版本的 Playwright 都需要特定版本的浏览器二进制文件才能运行。你需要使用 Playwright CLI 来安装这些浏览器。
每次发布新版本时,Playwright 都会更新其支持的浏览器版本,以确保最新的 Playwright 在任何时候都支持最新的浏览器。这意味着每次更新 Playwright 时,你可能都需要重新运行 install
CLI 命令。
安装浏览器
Playwright 可以安装受支持的浏览器。在不带参数的情况下运行此命令将安装默认浏览器。
playwright install
你也可以通过提供参数来安装特定浏览器
playwright install webkit
查看所有支持的浏览器
playwright install --help
安装系统依赖项
系统依赖项可以自动安装。这对于 CI 环境非常有用。
playwright install-deps
你也可以通过将其作为参数传递来为单个浏览器安装依赖项
playwright install-deps chromium
也可以将 install-deps
与 install
结合使用,以便通过一个命令安装浏览器和操作系统依赖项。
playwright install --with-deps chromium
有关官方支持的操作系统的列表,请参阅系统要求。
配置浏览器
Playwright 可以在 Chromium、WebKit 和 Firefox 浏览器以及品牌浏览器(如 Google Chrome 和 Microsoft Edge)上运行测试。它还可以在模拟的平板电脑和移动设备上运行。有关选定桌面、平板电脑和移动设备的完整列表,请参阅设备参数注册表。
在不同浏览器上运行测试
在特定浏览器上运行测试
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
Chromium
对于 Google Chrome、Microsoft Edge 和其他基于 Chromium 的浏览器,Playwright 默认使用开源的 Chromium 版本。由于 Chromium 项目领先于品牌浏览器,当世界上使用 Google Chrome N 时,Playwright 已经支持 Chromium N+1,这将在几周后在 Google Chrome 和 Microsoft Edge 中发布。
Chromium:无头 shell
Playwright 附带了一个用于有头操作的常规 Chromium 版本,以及一个单独的chromium 无头 shell 用于无头模式。
如果你只在无头 shell 中运行测试(即 **未** 指定 channel
选项),例如在 CI 上,你可以在安装时传递 --only-shell
来避免下载完整的 Chromium 浏览器。
# only running tests headlessly
playwright install --with-deps --only-shell
Chromium:新的无头模式
你可以使用 'chromium'
通道来选择新的无头模式。正如官方 Chrome 文档所述
另一方面,新的无头模式是真正的 Chrome 浏览器,因此更加真实、可靠,并提供更多功能。这使得它更适合于高精度的端到端 Web 应用测试或浏览器扩展程序测试。
有关详细信息,请参阅issue #33566。
pytest test_login.py --browser-channel chromium
在新的无头模式下,你可以在浏览器安装期间使用 --no-shell
选项跳过下载无头 shell
# only running tests headlessly
playwright install --with-deps --no-shell
Google Chrome 和 Microsoft Edge
虽然 Playwright 可以下载并使用最新的 Chromium 版本,但它也可以针对机器上可用的品牌 Google Chrome 和 Microsoft Edge 浏览器进行操作(请注意,Playwright 默认不安装它们)。特别是,当前的 Playwright 版本将支持这些浏览器的 Stable 和 Beta 通道。
可用通道包括 chrome
、msedge
、chrome-beta
、msedge-beta
、chrome-dev
、msedge-dev
、chrome-canary
、msedge-canary
。
某些企业浏览器策略可能会影响 Playwright 启动和控制 Google Chrome 和 Microsoft Edge 的能力。在具有浏览器策略的环境中运行超出了 Playwright 项目的范围。
Google Chrome 和 Microsoft Edge 已切换到一种新的无头模式实现,该实现更接近于常规的有头模式。这与 Playwright 在运行无头模式时默认使用的chromium 无头 shell 不同,因此在某些情况下可能会出现不同的行为。有关详细信息,请参阅issue #33566。
pytest test_login.py --browser-channel msedge
另外,当直接使用库时,你可以在启动浏览器时指定浏览器通道
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.net.cn")
print(page.title())
browser.close()
安装 Google Chrome 和 Microsoft Edge
如果你的机器上没有 Google Chrome 或 Microsoft Edge,你可以使用 Playwright 命令行工具安装它们
playwright install msedge
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 中的所有编解码器。如果你的网站依赖于这类编解码器(这种情况很少见),你也会希望使用官方通道。
企业策略
Google Chrome 和 Microsoft Edge 遵守企业策略,其中包括功能限制、网络代理以及妨碍测试的强制性扩展程序。所以如果你所在组织使用了此类策略,最简单的做法是使用捆绑的 Chromium 进行本地测试,你仍然可以在通常没有此类限制的机器人上选择稳定通道。
Firefox
Playwright 的 Firefox 版本与最近的Firefox Stable 版本匹配。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 配置为通过代理服务器下载浏览器。
- Bash
- PowerShell
- Batch
pip install playwright
HTTPS_PROXY=https://192.0.2.1 playwright install
$Env:HTTPS_PROXY="https://192.0.2.1"
pip install playwright
playwright install
set HTTPS_PROXY=https://192.0.2.1
pip install playwright
playwright install
如果代理请求被自定义的不受信任的证书颁发机构 (CA) 拦截,并在下载浏览器时出现 Error: self signed certificate in certificate chain
错误,则必须在安装浏览器之前通过 NODE_EXTRA_CA_CERTS
环境变量设置你的自定义根证书
- Bash
- PowerShell
- Batch
export NODE_EXTRA_CA_CERTS="/path/to/cert.pem"
$Env:NODE_EXTRA_CA_CERTS="C:\certs\root.crt"
set NODE_EXTRA_CA_CERTS="C:\certs\root.crt"
如果你的网络连接 Playwright 浏览器存档速度较慢,你可以使用 PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT
环境变量以毫秒为单位增加连接超时
- Bash
- PowerShell
- Batch
pip install playwright
PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000 playwright install
$Env:PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT="120000"
pip install playwright
playwright install
set PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT=120000
pip install playwright
playwright install
如果你正在安装依赖项,并且需要在 Linux 上使用代理,请确保以 root 用户身份运行该命令。否则,Playwright 将尝试成为 root 用户,并且不会将 HTTPS_PROXY
等环境变量传递给 Linux 包管理器。
sudo HTTPS_PROXY=https://192.0.2.1 playwright install-deps
从 artifact 仓库下载
默认情况下,Playwright 从 Microsoft 的 CDN 下载浏览器。
有时公司会维护一个内部 artifact 仓库来托管浏览器二进制文件。在这种情况下,可以使用 PLAYWRIGHT_DOWNLOAD_HOST
环境变量将 Playwright 配置为从自定义位置下载。
- Bash
- PowerShell
- Batch
pip install playwright
PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 playwright install
$Env:PLAYWRIGHT_DOWNLOAD_HOST="http://192.0.2.1"
pip install playwright
playwright install
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
pip install playwright
playwright install
还可以使用 PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST
、PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST
和 PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST
环境变量设置每个浏览器的下载主机,这些变量优先于 PLAYWRIGHT_DOWNLOAD_HOST
。
- Bash
- PowerShell
- Batch
pip install playwright
PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3 PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1 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
set PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST=http://203.0.113.3
set PLAYWRIGHT_DOWNLOAD_HOST=http://192.0.2.1
pip install playwright
playwright 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 时,要求它将浏览器下载到特定位置
- Bash
- PowerShell
- Batch
pip install playwright
PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers python -m playwright install
$Env:PLAYWRIGHT_BROWSERS_PATH="$Env:USERPROFILE\pw-browsers"
pip install playwright
playwright install
set PLAYWRIGHT_BROWSERS_PATH=%USERPROFILE%\pw-browsers
pip install playwright
playwright install
运行 Playwright 脚本时,要求它在共享位置搜索浏览器。
- Bash
- PowerShell
- Batch
PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers python playwright_script.py
$Env:PLAYWRIGHT_BROWSERS_PATH="$Env:USERPROFILE\pw-browsers"
python playwright_script.py
set PLAYWRIGHT_BROWSERS_PATH=%USERPROFILE%\pw-browsers
python playwright_script.py
Playwright 会跟踪需要这些浏览器的包,并在你将 Playwright 更新到新版本时对其进行垃圾回收。
开发人员可以通过在其 .bashrc
文件中导出 PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers
来选择此模式。
过期浏览器移除
Playwright 会跟踪使用其浏览器的客户端。当不再有客户端需要某个特定版本的浏览器时,该版本就会从系统中删除。这样,你可以安全地使用不同版本的 Playwright 实例,同时也不会浪费磁盘空间来存储不再使用的浏览器。
要选择退出未使用的浏览器移除功能,你可以设置 PLAYWRIGHT_SKIP_BROWSER_GC=1
环境变量。
卸载浏览器
这将移除当前 Playwright 安装中的浏览器(chromium、firefox、webkit)
playwright uninstall
要同时移除其他 Playwright 安装中的浏览器,请传递 --all
标志
playwright uninstall --all