C#でJavascript込でスクレイピングするためにCefSharpを使ってみる。
その過程でわかったことなどを書き溜めてみる。
・指定したURLを開いて、読み込んだhtmlを確認する。
//using System.Threading; //using CefSharp; //using CefSharp.OffScreen; string sTopPage = "https://www.google.co.jp/"; var browser = new ChromiumWebBrowser(sTopPage); Thread.Sleep(4000); //ページを読み込み、Javascriptを実行するのを待つ browser.ViewSource(); //読み込まれたhtmlをファイルに書き出し、メモ帳で開いて見せてくれる
・htmlを読み、Javascriptを読んで実行されるまで待つ
browser = new ChromiumWebBrowser(sPageURL);
browser.LoadingStateChanged += BrowserLoadingStateChanged;
----
private static void BrowserLoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
{
if (e.IsLoading)
{
//読込中。待つだけならここですることはない。
//if(!e.IsLoading)にして、このブロックはなくしてもいいはず
} else {
//読み込みが終わったあとの処理
}
}
・Anchorをクリックし、次のページへ遷移する
private enum States { TopPage, Menu01Page, Menu02Page };
private States state = States.TopPage;
var ClickAnchorScript = @"document.querySelector('li.menu01 a').click()"; //<li class=menu01><a href="..."></li>のaタグをクリック。コンテンツへの操作はJavascriptで。
browser.EvaluateScriptAsync(ClicAnchorScript).ContinueWith(u =>
{
state = States.Menu01Page; //遷移が成功したかどうか要確認。今は手抜き
});