これまでwebスクレーピングではSelenium.Chrome.WebDriverを使ってきました。ところがこの方法はインストールされているGoogle ChromeとDriverのバージョンがあっていないとうまく動いてくれません。またアプリを使用しようとしているパソコンにGoogle Chromeがインストールされていない可能性も考えられます。

そこで今回はPuppeteerSharpを使います。Google Chromeが実行ファイルがあるフォルダにインストールされるので、これならGoogle Chromeがインストールされていないパソコンやバージョンが合わないという問題を気にする必要がなくなります。ただ実行ファイルがあるフォルダのなかのファイル数が多くなり、ファイルサイズも大きくなってしまいます。

それではやってみましょう。以下はYahooJapanのトップページのhtmlを取得するコードです。

実際に実行してみると表示に時間がかかります。初回起動ではchromeのダウンロードがおこなわれるため、時間がかかるのです。時間がかかるのは最初だけで、2回目以降はそんなに時間はかかりません。

それからフォルダ内のファイルサイズがかなり大きくなります。調べてみると333MBもありました。

PuppeteerSharpを使うとスクリーンショットを撮ることもできます。以下のコードでスクリーンショットが撮れます。

大きさは40%に縮小しています。

またSetViewportAsyncメソッドで大きさを変更することもできます。以下は幅1000ピクセル、高さ5000ピクセルでスクリーンショットを撮るコードです。

大きさは40%に縮小しています。

スクロールさせるにはQuerySelectorAsyncメソッドやQuerySelectorAllAsyncメソッドでElementHandleを取得してElementHandle.HoverAsync()メソッドを実行します。

以下のコードは少しずつスクロールさせながらスクリーンショットを撮っています。

アンカーテキストやリンク先urlを取得するのであればGetPropertyAsync(“textContent”)とかGetPropertyAsync(“href”)とやれば取得できます。