5.CefSharpを使って、ヘッドレスブラウザを作る。

CefSharpには、ヘッドレスブラウザ(GUIを持たない)モード(CefSharp.OffScreen)があります。どういう場面で使用するのかイマイチわかりませんが、弊社製品の日報データ自動取得システムDT検索データ自動取得システムDTのようなデータ取得が主な目的のアプリケーションで使用できるかなと思います。

ここでは、ヘッドレスブラウザの機能を用いてWebを自動巡回し、スクリーンショットを撮るというデモをやってみます。

 

1.Visual Studio Community 2019 を起動して 「C#のWindowsコンソールアプリケーション(.NET Framework)」のプロジェクトを作成します。

2.メニュー「ツール(T)」-「NuGet パッケージ マネージャー(N)」-「ソリューションのNuGetパッケージの管理(N)…」を選択します。

3.左上の「参照」をクリックして、検索欄に「cefsharp.offscreen」と入力して検索を行い、検索結果の中から「CefSharp.OffScreen」を選択して、現在のプロジェクトにインストールします。

4.下画面で「OK」をクリックします。

5.インストールが終わると何やら警告が出ます。ソリューションプラットフォームに「x86」または「x64」を選択するようにと書いてあります。「AnyCPU」に変更したければ、https://github.com/cefsharp/CefSharp/issues/1714 を参照するようにと指示があります。(※これについては、プラットフォーム構成を変更して、AnyCPUで使用できるようにする。で解説しています。)

6.ソース(program.cs)を変更します。

using CefSharp.OffScreen;  ←が今までと違います。(ヘッドレスブラウザモードの指定)

await browser.ScreenshotAsync(true).ContinueWith(DisplayBitmap);  ←でスクリーンショットを撮ります。
「browser.ScreenshotAsync」は、CefSharp.OffScreenに含まれる機能です。

タイミングによっては上手く撮影できないので、await Task.Delay(1000); を事前行に挿入しています。

7.ここまで出来たら、実行してみます。

スクリーンショットした画像は .png 形式でデスクトップに保存されます。(タイミングによってレンダリング中の画面になったり、目的のページでなかったりするようです。非同期処理だからかも。。)

 

【ソース(program.cs)】