[C#]AngleSharpで、idやclassが未指定のform要素に値をセットする

カテゴリ: C# | タグ:

C#のスクレイピングライブラリであるAngleSharpを使っていて、以下のようなidもclassも指定されていないformのinput要素に値をセットしたいときがあります。

<form>
    <input type="text"     name="txtUserId"   value="">
    <input type="password" name="txtPassword" value="">
    <input type="hidden"   name="hash"        value="fewbaijgj">
</form>

このような場合は、inputタグをすべて列挙してnameが特定の値の時のみinputタグのvalueアトリビュートへ値をセットしてあげればよいです。

サンプルコード

こちらがid,classが未指定のform要素へ値をセットするサンプルコードです。

var userId = "user0001";
var password = "passw0rd";

// setup
var config = Configuration.Default.WithDefaultLoader().WithCookies();
var context = BrowsingContext.New( config );

// ログインページを開く
await context.OpenAsync( "https://example.com/login" );


// ログインフォームに値をセット
var inputTags = context.Active.All.Where( m => m.LocalName == "input" && m.HasAttribute("name") );
foreach (var inputTag in inputTags) {

    var name = inputTag.GetAttribute( "name" );
    switch ( name ) {
        case "txtUserId":
            inputTag.SetAttribute( "value", userId );
            break;
        case "txtPassword":
            inputTag.SetAttribute( "value", password );
            break;
    }
}

このコードでは、まずcontext.Active.Allでページ内に存在するすべてのタグを取得しています。次に、Whereでタグ名が"input"かつ、"name"のアトリビュートを持つタグだけ絞り込んでいます。

絞り込んだタグたちをループで処理します。ループの中ではnameアトリビュートにセットされている値に応じてユーザID・パスワードをセットすることで目的の処理を実行しています。


Amazonでおトクに買い物する方法
AmazonチャージでポイントGET


Amazonは買いもの前にAmazonギフト券をチャージしてポイントをゲットしないと損!

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。