21 年 6 月 9 日 PlaywrightSharp 正式发布了稳定版 1.21.1,包名称也从 PlaywrightSharp 更名为 Microsoft.Playwright
恰逢今天 SteamDB 又出幺蛾子,修完 Bug 后正好升级一下 Playwright(0.19.x 升级到目前最新版 1.21.2)
以下记录升级过程遇到的坑
Nuget 重装包
PlaywrightSharp 的最后一个测试版本为 0.192.0,打开 VS 的 Nuget 包管理就会发现 VS 提示 PlaywrightSharp 已经不再维护
现在 .NET 使用 Playwright 需要改为安装 Microsoft.Playwright
安装完毕后更改引用为
using Microsoft.Playwright;
即可
安装 Playwright 系统环境
测试版时会自动安装驱动和浏览器,也可以通过在代码中添加
await Playwright.InstallAsync();
来动态安装 Playwright 运行驱动
稳定版中此方法被砍,只保留了操作系统层面的全局安装
在运行 Playwright 程序前,需要先在系统 shell 中执行
dotnet tool install --global Microsoft.Playwright.CLI
来安装 Playwright CLI 程序,之后执行
playwright install
安装 Playwright 运行所需的三大浏览器
另:如果有在同一系统下使用 python 和 C# Playwright 的需求(不同语言的 Playwright SDK),可以先 pip 卸载 python Playwright 的旧版本,进行 C# 的安装步骤,然后装回新版的 python Playwright,python 调用时会自动调用对应浏览器。Playwright 自动下载的浏览器会保存在 %LOCALAPPDATA%\ms-playwright (Windows) 下,供所有语言的 Playwright SDK 使用
安装完成后可以删除位于 %USERPROFILE%.nuget\packages 下的旧版 PlaywrightSharp 缓存以及位于 %LOCALAPPDATA%\ms-playwright 下的旧版浏览器
方法名称的变化
除了上述的 InstallAsync 被砍,而且还更改了很多常用方法名称,例如:
// 去掉了 Get GetInnerHtmlAsync => InnerHTMLAsync GetInnerTextAsync => InnerTextAsync GetCookiesAsync => CookiesAsync // 大写变小写 GoToAsync => GotoAsync
可以在 GitHub - Release 查看完整的更新日志
程序发布后检测不到 Playwright 驱动
执行
dotnet publish
后执行程序,在 Playwright 新建实例时报错,提示找不到 playright.cmd 驱动(意思大致如此,当时忘记保存报错信息)
3 月 2 日就已经有人在 GitHub - issues 中提出这一问题,正式版依然有这个问题,Playwright 目前还不能很好的支持 dotnet publish
issue 中用户 pkrakowiak 分析的原因:https://github.com/microsoft/playwright-dotnet/issues/1226#issuecomment-806792306
issue 中的用户提供了几个不用使用场景的解决方案:
- https://github.com/microsoft/playwright-dotnet/issues/1226#issuecomment-791408016
- https://github.com/microsoft/playwright-dotnet/issues/1226#issuecomment-815397071
- https://github.com/microsoft/playwright-dotnet/issues/1226#issuecomment-821119087
- https://github.com/microsoft/playwright-dotnet/issues/1226#issuecomment-841171458
这里我选择了最简单、对项目结构影响最小的方法:直接复制 dotnet build 后的 .playwright 驱动目录到 publish 目录,下图为 build 目录生成的 .playwright 目录
将其复制到 publish 对应目录
一些不成熟的 Playwright 使用经验
- 测试版时 Chromium 依然可以被 Cloudflare 检测到,推测 Cloudflare 针对 Chromium 浏览器加强了防御,正式版不抱希望也就没有测试
- 测试版 PlaywrightSharp 的某个版本出现过上游(FireFox 本身)Bug,导致 Playwright 加载页面时卡在白屏的情况
- 综上,如果图省事省心最好用 WebKit