Playwright簡單試用

上篇關於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://images2018.cnblogs.com/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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章