DUICUO

ブラウザ自動化用の .NET オープンソース ライブラリ。

高レベル API を使用して Chromium ブラウザを簡単に制御できる .NET オープンソース ライブラリをお勧めします。

I. プロジェクトの概要

これは、Google のオープンソース Node.js ライブラリ Puppeteer をベースにしたオープンソースの .NET ライブラリであり、開発者がヘッドレス Web ブラウザを使用して Web をクロールしたり、JavaScript によってレンダリングされた HTML を取得したり、UI 要素を操作したりすることを容易にします。

たとえば、Web ページのスクレイピング、ページの PDF または画像の生成、Web ページのスクリーンショットの取得、自動テストの実行に使用できます。

II. プロジェクトの中核機能

  • ブラウザの操作: ブラウザのウィンドウやタブを開く/閉じる、前のページに戻る、ページを印刷する、ページを再読み込みするなど。
  • JavaScript スクリプトの実行: JS コード/関数などを実行します。
  • HTML ページの操作: 要素の属性やテキスト コンテンツの取得、要素の挿入や変更など。
  • マウス操作をシミュレートします。ページ要素のクリック、ページ要素のダブルクリック、ページ要素のドラッグなどをシミュレートします。
  • シミュレートされたキーボード入力: テキストの入力、キーの押下、キーの押しっぱなしなど。
  • ページ イベント: ページの読み込みが完了するのを待機したり、フォントの読み込みが行われたりするなどのイベント。

III. 使用例

1. ウェブページのスクリーンショット

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(); }