一個(gè)瀏覽器自動(dòng)化操作的.Net開源庫(kù)
作者:編程樂(lè)趣
這是一個(gè)基于 Google 開源的 Node.js 庫(kù) Puppeteer 的 .NET 開源庫(kù),方便開發(fā)人員使用無(wú)頭 Web 瀏覽器抓取 Web、檢索 JavaScript 呈現(xiàn)的 HTML,以及與 UI 元素交互等功能。
推薦一個(gè).Net開源庫(kù),方便通過(guò)高級(jí)API來(lái)控制Chromium 瀏覽器。
一、項(xiàng)目簡(jiǎn)介
這是一個(gè)基于 Google 開源的 Node.js 庫(kù) Puppeteer 的 .NET 開源庫(kù),方便開發(fā)人員使用無(wú)頭 Web 瀏覽器抓取 Web、檢索 JavaScript 呈現(xiàn)的 HTML,以及與 UI 元素交互等功能。
比如可以用來(lái)抓取網(wǎng)頁(yè)、生成頁(yè)面 PDF 或者圖片、網(wǎng)頁(yè)截屏,以及進(jìn)行自動(dòng)化測(cè)試等。
二、項(xiàng)目核心功能
- 操作瀏覽器:比如新開/關(guān)閉瀏覽器窗口核標(biāo)簽、返回頁(yè)面、打印頁(yè)面、重新加載頁(yè)面等;
- 執(zhí)行JavaScript腳本:執(zhí)行Js代碼/函數(shù)等;
- 操作Html頁(yè)面:比如獲取元素的屬性、文本內(nèi)容,插入、更改元素等;
- 模擬鼠標(biāo)操作:模擬點(diǎn)擊頁(yè)面元素、雙擊頁(yè)面元素、拖動(dòng)頁(yè)面元素等;
- 模擬鍵盤輸入:輸入文字、按下按鍵、摁住按鍵等;
- 頁(yè)面事件:等待頁(yè)面加載完畢、字體加載等事件。
三、使用示例
1、網(wǎng)頁(yè)截屏
using PuppeteerSharp;
using var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();
await using var browser = await Puppeteer.LaunchAsync(
new LaunchOptions { Headless = true });
await using var page = await browser.NewPageAsync();
await page.GoToAsync("http://www.xxx.com");
var outputFile = "screenshot.jpg";
await page.ScreenshotAsync(outputFile);
2、生成頁(yè)面PDF
using PuppeteerSharp;
using var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
await using var page = await browser.NewPageAsync();
await page.GoToAsync("http://www.xxx.com");
//等待字體加載完畢
await page.EvaluateExpressionHandleAsync("document.fonts.ready");
var outputFile = "page.pdf";
await page.PdfAsync(outputFile);
3、加載頁(yè)面并獲取頁(yè)面的所有超鏈接
using PuppeteerSharp;
using System;
//瀏覽器配置
var options = new LaunchOptions { Headless = true };
await new BrowserFetcher().DownloadAsync();
//打開瀏覽器
using (var browser = await Puppeteer.LaunchAsync(options))
using (var page = await browser.NewPageAsync())
{
//加載頁(yè)面
await page.GoToAsync("http://www.xxx.com");
//獲取所有超鏈接
var jsSelectAllAnchors = @"Array.from(document.querySelectorAll('a')).map(a => a.href);";
var urls = await page.EvaluateExpressionAsync<string[]>(jsSelectAllAnchors);
foreach (string url in urls)
{
Console.WriteLine($"Url: {url}");
}
Console.ReadLine();
}
責(zé)任編輯:姜華
來(lái)源:
今日頭條