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

前言

上次的文章Hello Playwright:(1)从开发到部署发表后,有网友留言问,有不有简化部署的方式:

cdf22e3312092541f48b29add06ca134.png

下面,提供 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 并修复)

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

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

5170d17916143150c6e26229e0b9e469.gif

结论

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

添加微信号【MyIO666】,邀你加入技术交流群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值