スポンサーリンク

【C#】Anglesharpでボタンクリックする方法ご紹介。〜スクレイピング〜

C#
スポンサーリンク

今回の記事はC#でスクレイピング用ライブラリのAnglesharpを用いてサイト内のボタンをクリックしてその先のサイト情報や応答結果の取得を行う方法に関しての記事です。初心者にも分かりやすいように記事を記載していくので是非参考にして下さい。

スポンサーリンク

C#でAnglesharpを使う方法

AngleSharpをVisualStudioにインストール

まずはVisualStudioにAngleSharpをインストールします。Nugetのパッケージ管理からインストールできます。

メニューバーの[tool]→[nu get]→[パッケージの管理]からAngleSharpを検索してインストールを押すのみです。

AngleSharpでスクレイピング

では実際にサンプルページを参考にしてスクレイピングしてみてください。

下記コードはgoogleの検索ページの入力欄に文字入力、検索ボタンクリック 、表示されたサイトのタイトル一覧を取得するコードになります。(こちらはネットに転がっていたものです。)

using System;
using System.Linq;
using System.Net.Http;
using AngleSharp.Html.Parser;

namespace test
{
    class Program
    {
        // HttpClientのインスタンス
        private static HttpClient client = new HttpClient();

        // HttpClientのインスタンスは使いまわす必要があります。

        static void Main(string[] args)
        {
            //サンプルとして使用するHTML
            var htmlText = @"
<html>
    <head>
        <meta charset = 'UTF-8'/>
        <title>AngleSharpの使い方</title>
    </head>
    <body>
        <div id = 'header' name='headerName'>
        <h1 id = 'headerTitle'>AngleSharpの使い方</h1>
        </div>
     </body>
</html>
";

            // HtmlParserクラスをインスタンス化
            var parser = new HtmlParser();

            // HtmlParserクラスのParserメソッドを使用してパースする。
            // Parserメソッドの戻り値の型はIHtmlDocument
            var htmlDocument = parser.ParseDocument(htmlText);
            // aタグの要素を全て取得する。
            var urlElements = htmlDocument.QuerySelectorAll("title");
            Console.WriteLine(urlElements.ToArray()[0].TextContent);
        }
    }
}

簡単に解説するとベタガキしたHtmlを取得しています。こちらを業務用に使用する場合はhttp通信などをwebcliantを使用して取得すると思いますが、今回に関してはベタがきのhtmlからtitle要素をSelectorを使用して取得しています。

今回のコードではSelectorAllを使用していますがSelectorでも取得できると思います。

http通信とAngleSharpを併用する場合は下記記事が参考記事になっております。

C#でAnglesharp+http通信でスクレイピングする方法。〜AngleSharp単体での限界〜

では今回のメインに進んでいきます。

Anglesharpでボタンクリック

上記で簡単な使い方に関しては理解できたと思うのでボタンセレクターを特定してボタンクリックを行っていきます。

using System;
using System.Linq;
using System.Threading.Tasks;
using AngleSharp;
using AngleSharp.Html.Dom;

namespace test
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var titles = await searchByGoogle("AngleSharp");
            foreach (var title in titles)
            {
                Console.WriteLine(title);
            }
        }

        private static async Task<System.Collections.Generic.IEnumerable<string>> searchByGoogle(string searchKeyword)
        {
            // セットアップ
            var config = Configuration.Default.WithDefaultLoader();
            var context = BrowsingContext.New(config);
            // 検索ページを開く
            var document = await context.OpenAsync("https://www.google.co.jp/");
            // 指定したキーワード(test)で、検索を行う
            var form = document.QuerySelector("form") as IHtmlFormElement;
            await form.SubmitAsync(new { q = searchKeyword,} );
            // 検索結果のタイトル一覧を取得する
            var tags = context.Active.QuerySelectorAll("h3");
            var titles = tags.Select(m => m.TextContent);
            return titles;
        }
    }
}

以上でボタンクリック に関して行えていると思います。googleページを対象ページにしていますが、google検索欄のへの値記入し、検索ボタンを押すという動作です。要はフォーム情報送信を「submitasync」で担っているみたいなイメージです。

ただ、ボタンクリックといっても要はサーバへのhttp通信でフォーム情報を送信していることが多いのでその場合は、http通信で簡単に処理を行うことができると思います。そのような場合は先ほど紹介した記事「C#でAnglesharp+http通信でスクレイピングする方法。〜AngleSharp単体での限界〜」でAnglesharp+Post通信で処理を実装できるかも興味があれば確認してみて下さい。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

C#
スポンサーリンク
スポンサーリンク
ともぶろぐ

コメント

  1. […] 「【C#】AngleSharpでボタンクリック」 […]

タイトルとURLをコピーしました