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; //遷移が成功したかどうか要確認。今は手抜き });