.NET Playwright 升级 1.21.x 稳定版后一些问题的解决

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 中的用户提供了几个不用使用场景的解决方案:

这里我选择了最简单、对项目结构影响最小的方法:直接复制 dotnet build 后的 .playwright 驱动目录到 publish 目录,下图为 build 目录生成的 .playwright 目录

将其复制到 publish 对应目录

一些不成熟的 Playwright 使用经验

  1. 测试版时 Chromium 依然可以被 Cloudflare 检测到,推测 Cloudflare 针对 Chromium 浏览器加强了防御,正式版不抱希望也就没有测试
  2. 测试版 PlaywrightSharp 的某个版本出现过上游(FireFox 本身)Bug,导致 Playwright 加载页面时卡在白屏的情况
  3. 综上,如果图省事省心最好用 WebKit

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据