.netCore下用playwright获取Cookies

2023年7月15日 1013点热度 1人点赞 0条评论

playwright是一个基于Node.js的浏览器自动化测试库,.netCore中也有对应的版本。写一些稍微复杂点的spider有时候会用到它。这里分享一下C#(基于.netCore6平台)调用playwright获取Cookies字符串的简单实现。

playwright的安装非常简单,通过nuget包引入即可,但是在导入nuget包后,还需要下载其对应的浏览器驱动(Chromium、Firefox、WebKit)。

在项目目录\bin\Debug\net6.0-windows(如果是控制台程序,目录名会不同) 中执行:./playwright.ps1 install 调用playwright的驱动安装脚本,其后会有一个下载过程,如下图所示:

这一步完成后,就可以通过代码进行playwright的使用了。本文只演示获取Cookies字符串。

我们创建playwright实例及其对应的上下文对象context,然后通过上下文context的CookiesAsync()方法读取网址对应的Cookies,CookiesAsync()方法将Cookies字符串中的键值对解析为BrowserContextCookiesResult类型对象,为了方便使用,示例中再将BrowserContextCookiesResult中的键值对属性信息拼接成Cookies字符串。代码示例如下,只做功能演示,未加入异常处理,Null判断等。

private async void button2_Click(object sender, EventArgs e)
{
    // 初始化一个存储Cookies字符串的临时变量
    string cookiesStr = string.Empty;
    var playwright = await Playwright.CreateAsync();
    var browser = await playwright.Chromium.LaunchAsync();
    var context = await browser.NewContextAsync();
    var page = await context.NewPageAsync();
    // 想要获取Cookies的目标地址
    await page.GotoAsync("https://xxxxxxx.com");
    var cookies = await context.CookiesAsync();
    cookies.ToList().ForEach(cookie =>
    {
        cookiesStr += (cookie.Name + "=" + cookie.Value + ";");
    });
    // 删除字符串结尾的“;”
    cookiesStr = cookiesStr.Remove(cookiesStr.Length - 1);
    MessageBox.Show($"{cookiesStr}");
}

QThinker

前地产从业者,假装是个程序员,热爱编程与交易 自研QThinker量化交易框架

文章评论