Hello Playwright:(1)从开发到部署

前言

虽然前面写过几篇 C# 使用 Playwright 的文章,但是讲解的不太全面。

看到有朋友有学习这方面的需要:

7e61828a0d96ad93a7db30658690b39a.png

因此,就有了《Hello Playwright》这个系列的产生。

Playwright 介绍

Playwright 是微软开源的一个基于 Node.js 的工具库,可使用相同的API调用Chromium(Google-Chrome、Microsoft-Edge)、WebKit(Apple-Safari)和Mozilla-Firefox浏览器自动执行任务。

因此,通过使用 Playwright, 可以以编程的方式,完成原来需要手工操作浏览器的工作,比如登录网站、提交表单等。

而要在 C# 中使用 Playwright, 可以使用 官方 .NET 移植版本 Playwright for .NET

Playwright 入门

今天的目标,是在开发环境安装 Playwright for .NET,使用示例代码完成第一次运行,并发布到生产环境运行。

1.创建项目

在命令行窗口,使用 dotnet CLI 创建一个控制台应用,并添加 Playwright 依赖:

dotnet new console -n HelloPlaywright_01cd HelloPlaywright_01dotnet add package Microsoft.Playwright

3de0f11db3fde864dff95b3655dfb02c.gif

2.安装浏览器

用 VS.NET 打开创建好的项目,在资源管理器的项目名称上点右键,选择“在终端中打开”,进入开发者 PowerShell 窗口:

ee16147fbadfe0880e25dbb3837d2f2e.png

Playwright 需要特定版本的浏览器二进制文件才能运行,因此我们需要在开发者 PowerShell 窗口中运行以下命令安装所有受支持的浏览器二进制文件:

dotnet build.\bin\Debug\net5.0\playwright.ps1 install

b73652d149ceace868fbd4c6c88f38d9.gif

3.编写代码

终于可以编写 Playwright 使用代码了:

var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.GotoAsync("https://www.baidu.com");
var title = await page.InnerTextAsync("title");
Console.WriteLine(title);

先不解释代码的具体含义,你只需要知道它的作用——访问百度首页,并获取网页标题:

51fcef35ebf1b965acbae8d885b47f8c.png

4.发布

发布方式和普通的 .NET 程序一样。

这里我们选择发布成文件夹,为了演示效果,部署模式选择“独立”,可以不依赖框架运行:

a3afecbaa99c7d5705537849cfd06ac3.gif

5.部署

我们将发布文件夹复制到另一台机器上。

但在运行我们的程序之前,需要在这台机器上重新安装 Playwright,但无需安装 dotnet 框架或运行时。

运行发布文件夹下的安装命令:

.playwright\node\win32_x64\playwright.cmd install

e427f8ebcb6d88ac8759de337a8a8240.gif

然后,就可以运行我们的控制台程序了:

de6dbd06afb6bb7454a468abc30e37a6.png

结论

今天,我们演示了 Playwright for .NET 从开发到部署的整个流程。

想了解更多内容,请关注我的个人公众号”My IO“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没有主清单属性_原神:晴知的主C诺艾尔大型进阶攻略初版

作者:NGA-最可爱的晴知前言大家好我是晴知,一个诺艾尔主C玩家(目前是0命座),截至10月8日,我的账号等级为41级,深境螺旋11层打通,但星数不够12层,一者因为圣遗物太烂而我想45级再刷圣遗物&#x…

【ArcGIS风暴】ArcGIS栅格数据(分区)统计方法总结

【问题描述】如图所示,如何根据中国植被区划分区,统计各个区域内NDVI的平均值? 目录 1、Layer Properties 2、Zonal Statistics as Table 3、Band Collection Statistics 分区统计及根据统计区域或赋值栅格为每个区域计算统计数据。分区统计包括众数、最大值、均值、中位…

剑指offer之反转链表

1 问题 反转链表,比如0->1->2->3反转后变成了3->2->1->0 2 分析 搞3个指针,初始化一个指针,让头结点指向这里,然后另外一个指针初始化为NULL,然后让第一个节点指向这里,然后头结点依次…

php str_replace 字符串替换

我们在这里使用 str_replace 来替换一串字符串中的字符&#xff0c;例如如下代码&#xff1a; <?php $strHello world!; $str1str_replace("world","Terry",$str); echo $str1; str的值为Hello world!&#xff0c;我们在str_replace后面第一个参数是…

python去掉字符串中空格的方法

1.strip()&#xff1a;把头和尾的空格去掉 2.lstrip()&#xff1a;把左边的空格去掉 3.rstrip()&#xff1a;把右边的空格去掉 4.replace(c1,c2)&#xff1a;把字符串里的c1替换成c2。故可以用replace( ,)来去掉字符串里的所有空格 5.split()&#xff1a;通过指定分隔符对字符串…

快速合并同一个excel表中的多个sheet

很多朋友会遇到这样的问题,就是很有很多页的数据,少的有几十页,多的可能有几百页,然后需要合并到一个页面做数据分析,如果一页页的复制粘贴的话,就比较麻烦。下面我就介绍一种利用excel的宏计算来解决这个问题。 一、数据准备 二、合并效果

LoadRunner中进程运行和线程运行区别

LoadRunner中进程运行和线程运行区别 发布时间: 2012-5-23 10:29 作者: 田志良 来源: 51Testing软件测试网采编 字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 | 推荐标签&#xff1a; 性能测试 软件测试 LoadRunner loadrunner 测试工具 LoadRunner control…

释放内存软件_原来苹果手机这样清理内存,可以释放大量空间,真是太好用了...

相信大家都喜欢用苹果手机&#xff0c;给人感觉就是流畅&#xff0c;但是苹果手机使用久了&#xff0c;内存不足也会导致卡顿的&#xff0c;今天就来教大家清理苹果手机内存的方法&#xff0c;可以释放大量空间。一、正确卸载软件很多人在使用手机时&#xff0c;发现有些软件不…

linux用户取消密码,[Linux]linux下取消用户名和密码直接登录

假定目前只有root用户&#xff0c;则有如下两种方式可直接登录系统&#xff1a;方式一&#xff1a;1. passwd -d root, 但ssh必须要有用户名和密码&#xff0c;所以可以passwd root, 然后输入密码2. 修改/lib/systemd/system/serial-getty\.service#ExecStart-/sbin/agetty --k…

gitlab永久设置密码

在 .gitconfig 文件中加入&#xff1a; [credential] helper store .git-credentials close address转载于:https://www.cnblogs.com/rhxuza1993/p/7355952.html

strstr和strcchr查找字符串和区别

我们先看一串代码&#xff1a; <?php$str1 SDABCDEFGABCDEF; $str2 strstr($str1 , A); echo "strstr 结果: $str2 <br/>"; $str3 strrchr($str1 , A); echo "strrchr 结果: $str3 <br/>"; strstr 是找到我们所要查找的字符串&#…

剑指offer之合并已排序链表(递归实现)

1 问题 合并2个已经排好序的链接&#xff0c;比如 1->3->5->7 2->4->6 合并后新的链表如下 1->2->3->4->5->6->7 2 代码实现 #include <stdio.h> typedef struct Node {int val;struct Node *next; } Node;/**print list*/ void …

程序对拍

在一些特殊的比赛中&#xff0c;我们需要用一个暴力程序来验证一个采取了高效算法的程序是否正确&#xff0c;所以就有了对拍。 对拍程序&#xff1a; echo off :loop rand.exe>data.in std.exe<data.in>std.outmy.exe<data.in>my.out fc my.out std.out …

Xamarin效果第二十三篇之离线语音识别

在前面文章中简单玩了玩GIS的基本操作、Mark相关、AR、测距、加载三维白模、可扩展浮动操作和录音效果;今天抽空再来分享一下最近摸索的基于讯飞的离线语音识别效果,其实就简单用了一下离线命令词识别,看效果:1、先去控制台创建应用:https://console.xfyun.cn/app/myapp2、去组…

linux脚本漏洞,Silver Peak VX跨站脚本漏洞(CVE-2014-2975)

发布日期&#xff1a;2014-07-28更新日期&#xff1a;2014-07-30受影响系统&#xff1a;silver peak Silver Peak VX描述&#xff1a;--------------------------------------------------------------------------------BUGTRAQ ID: 68923CVE(CAN) ID: CVE-2014-2975Silver P…

php获取当前操作系统类型 PHP_OS

如果你想判断当前的系统类型&#xff0c;那么可以使用 PHP_OS 常量。 例如如下代码&#xff1a; <?phpecho PHP_OS; 输出&#xff1a; WINNT 那么我们可以这样&#xff1a; define(IS_WIN,strstr(PHP_OS, WIN) ? 1 : 0 );//(在tp3.2中看到就顺便拿上来了) 定义一个…

JSON.parse()和JSON.stringify()

为什么80%的码农都做不了架构师&#xff1f;>>> parse用于从一个字符串中解析出json对象,如 var str {"name":"huangxiaojian","age":"23"} 结果&#xff1a; JSON.parse(str) Object age: "23"name: "hu…

剑指offer之树的子结构

1 题目 输入两颗二叉树A和B&#xff0c;判断B是不是A的子结构&#xff08;B树是A树的子结构&#xff09; 比如&#xff1a; 2 树A 3 5 树B 5 1 4 2 3 2 3 很明显树B是树A的子结构 2 代码实现 #include <stdi…

如果编程语言是女孩子

试想一下&#xff0c;当Java、C、Python、Ruby、PHP、C#、JS等编程语言变成了动漫人物会是怎样的一幅场景呢&#xff1f;下面就一起看看在日本作家渡辺将人的笔下&#xff0c;各种编程语言都是哪类可爱的女孩子的吧&#xff01; 究竟心里有多喜欢&#xff0c;才能画出如此可爱的…

python中多维数组_python学习笔记-多维数组

Python中初始化一个5 x 3每项为0的数组&#xff0c;最好方法是&#xff1a;multilist [[0 for col in range(5)] for row in range(3)]我们知道&#xff0c;为了初始化一个一维数组&#xff0c;我们可以这样做&#xff1a;alist [0] * 5没错&#xff0c;那我们初始化一个二维…