标签:playwright await ctx Playwright 试用 简单 var page browser
距上篇关于playwright文章过去有一年多了,主要是因为加上早期的playwright并不是很成熟,缺少我最常用到的直接通过CDP(chrome dev protocol)来连接的这种场景的支持。加上我用它也只是作为写蜘蛛程序玩下,今天在再看了下playwright后,发现现在playwright已经完善了不少,不仅支持通过cdp的方式来连接了,c#的版本也更加强大了,写个文章简单的记录一下。
Node版本
安装@playwright/test库
首先需要安装@playwright/test这个Npm库,需要注意的是:默认情况下,playwright库会下载好几个浏览器,造成速度非常慢。我们可以通过设置PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD为1来跳过这个过程。
$env:PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
yarn add @playwright/test
常规启动
const browser = await chromium.launch(
{
executablePath: `C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe`,
headless: false,
})
const page = await browser.newPage();
await page.goto('https://www.baidu.com');
使用CDP协议连接到打开的浏览器
const browser = await chromium.connectOverCDP('http://127.0.0.1:9222/');
let ctx = browser.contexts()[0];
let page = await ctx.newPage();
await page.goto("https://www.cnblogs.com/TianFang/")
文件下载
这里是用之前用Puppeteer的方式图片下载的示例,利用CDP接口来下载文件。Puppeteer里面CDP还是一个私有接口,playwright直接官方支持了,值得点赞。
const client = await ctx.newCDPSession(page);
let resTree = await client.send('Page.getResourceTree');
let url = 'https://www.icode9.com/i/i/?n=18&i=blog/12132/201805/12132-20180520201839221-1840995562.png';
await client.send('Page.enable');
const { content, base64Encoded } = await client.send(
'Page.getResourceContent',
{ frameId: resTree.frameTree.frame.id, url },
);
C#版本
安装Microsoft.Playwright库
首先我们需要安装Microsoft.Playwright这个Nuget库,为了避免下载浏览器,一样要设置PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD为1
基础示例
基础示例如下,和node的版本非常类似,C#的版本用起来还是非常输入的。
var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.ConnectOverCDPAsync("http://127.0.0.1:9222/"); var ctx = browser.Contexts[0]; var page = await ctx.NewPageAsync();
文件下载
C#的库在一些高级功能相比node的版本还是缺少一些,如还没有封装DevProtocol的api,不能像前面那样通过CDP的接口下载文件了,不过我摸索了一下,可以通过IBrowserContext.APIRequest对象发送http请求实现文件下载。
var rsp = await ctx.APIRequest.GetAsync(url); var content = await rsp.BodyAsync();
标签:playwright,await,ctx,Playwright,试用,简单,var,page,browser 来源: https://www.cnblogs.com/TianFang/p/16536251.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。