一個(gè)瀏覽器自動化操作的.Net開源庫
作者:編程樂趣
這是一個(gè)基于 Google 開源的 Node.js 庫 Puppeteer 的 .NET 開源庫,方便開發(fā)人員使用無頭 Web 瀏覽器抓取 Web、檢索 JavaScript 呈現(xiàn)的 HTML,以及與 UI 元素交互等功能。
推薦一個(gè).Net開源庫,方便通過高級API來控制Chromium 瀏覽器。
一、項(xiàng)目簡介
這是一個(gè)基于 Google 開源的 Node.js 庫 Puppeteer 的 .NET 開源庫,方便開發(fā)人員使用無頭 Web 瀏覽器抓取 Web、檢索 JavaScript 呈現(xiàn)的 HTML,以及與 UI 元素交互等功能。
比如可以用來抓取網(wǎng)頁、生成頁面 PDF 或者圖片、網(wǎng)頁截屏,以及進(jìn)行自動化測試等。
二、項(xiàng)目核心功能
- 操作瀏覽器:比如新開/關(guān)閉瀏覽器窗口核標(biāo)簽、返回頁面、打印頁面、重新加載頁面等;
- 執(zhí)行JavaScript腳本:執(zhí)行Js代碼/函數(shù)等;
- 操作Html頁面:比如獲取元素的屬性、文本內(nèi)容,插入、更改元素等;
- 模擬鼠標(biāo)操作:模擬點(diǎn)擊頁面元素、雙擊頁面元素、拖動頁面元素等;
- 模擬鍵盤輸入:輸入文字、按下按鍵、摁住按鍵等;
- 頁面事件:等待頁面加載完畢、字體加載等事件。
三、使用示例
1、網(wǎng)頁截屏
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、生成頁面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、加載頁面并獲取頁面的所有超鏈接
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())
{
//加載頁面
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é)任編輯:姜華
來源:
今日頭條