2

Hello Playwright:(2)简化部署方式

 2 years ago
source link: https://blog.51cto.com/MyIO/5279218
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

 ​上次的文章​​发表后,有网友留言问,有不有简化部署的方式:

Hello Playwright:(2)简化部署方式_sed

下面,提供 2 种可行的方案。

方案 1. Copy

其实 Playwright 默认是到​​C:\Users\用户名\AppData\Local\ms-playwright​​文件夹下查找依赖的浏览器,我们只需将本机文件夹复制到部署机器的对应文件夹即可。

但更简便的方式,是将浏览器也放到发布文件夹下一起部署。

具体做法如下:

  • 修改代码,设置查找依赖浏览器路径的环境变量:
static async Task Main(string[] args)
{
Environment.SetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ms-playwright"));

var playwright = await Playwright.CreateAsync();

...
}
  • 修改项目文件,设置发布时执行 Task,复制 ms-playwright 文件夹到发布文件夹下:
<Target Name="PublishPlaywright" AfterTargets="Publish">
<ItemGroup>
<PlaywrightFiles Include="$(LOCALAPPDATA)\ms-playwright\**\*.*" />

</ItemGroup>
<Copy
SourceFiles="@(PlaywrightFiles)"
DestinationFiles="$(PublishDir)\ms-playwright\%(RecursiveDir)%(Filename)%(Extension)"
/>
</Target>
  • 按照正常流程发布

现在将发布文件夹复制到另一台机器上,无需运行浏览器安装命令,直接运行控制台程序。

控制台程序将读取 EXE 当前所在文件夹下的​​ms-playwright​​文件夹,获取依赖的浏览器。

但是,这种方式有个明显的缺点——开发和部署的计算机的操作系统必须一致,比如, Windows 开发机上的浏览器文件不能发布到 Linux 上运行。

这时,可以采用方案 2。

方案 2. 自动安装

方案 2 还是需要运行浏览器安装命令,但是从手工运行改成由代码运行:

static async Task Main(string[] args)
{
Console.WriteLine("Start download chromium");
var exitCode = Microsoft.Playwright.Program.Main(new[] { "install", "chromium" });
if (exitCode != 0)
{
throw new Exception($"Playwright exited with code {exitCode}");
}

var playwright = await Playwright.CreateAsync();

...
}

需要注意的是,部署模式一定要选“独立”,否则对应操作系统的安装脚本不会复制到发布文件夹。(我发现 v1.21 存在此 bug,已提交 issue 并修复)

按照正常流程发布,直接运行控制台程序。

控制台程序将自动执行浏览器安装命令:

Hello Playwright:(2)简化部署方式_控制台程序_02

2 种简化部署方案,是否能够满足你的需要?欢迎留言反馈!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK