要素を選択してフォームを送信するhtmlagilitypack

c# html-agility-pack xpath

質問

私はちょうどhtmlagilitypackで作業を始めました、そして、私はこれまでこれを愛しています。

ラジオボタンを選択し、htmlagilityを使用してフォームを送信しようとしています。

ここにウェブサイトの構造があります:

<form class="picker" action="link.html" method="POST">
    <ul class="selection-list">
        <li>
            <label>
                <span class="left-side">
                    <input name="id" value="t1" type="radio">
                </span>
                <span class="right-side">
                    Test1
                </span>
            </label>
        </li>
        <li>
            <label>
                <span class="left-side">
                    <input name="id" value="t2" type="radio">
                </span>
                <span class="right-side">
                    Test2
                </span>
            </label>
        </li>
        <li>
            <label>
                <span class="left-side">
                    <input name="id" value="t3" type="radio">
                </span>
                <span class="right-side">
                    Test3
                </span>
            </label>
        </li>
    </ul>
</form>

私はフォームを得ることができます。ここにコードです:

    HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(urlAddress);

// Get the form
var form = doc.DocumentNode.SelectSingleNode("//form[@class='picker']");

たとえば、

  • Test2し、フォームを提出する? htmlagilitypackを使用することは可能ですか、別のライブラリが必要ですか?

    ありがとう

  • 人気のある回答

    var uri = // get uri from form;
    var formVariables = new List<KeyValuePair<string, string>>();
    
    // Populate your variables here; HtmlAgilityPack is useful for propagating existing form values
    formVariables.Add(new KeyValuePair<string,string>("id","t2"));
    
    var formContent = new FormUrlEncodedContent(formVariables);
    
    using (var message = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = uri, Content = formContent })
    {
        // use HttpClient to send the message
        using (var postResponse = await client.SendAsync(message))
        {
            if (postResponse.IsSuccessStatusCode)
            {
                var stringContent = await response.Content.ReadAsStringAsync();
    
                // Do something with string content
            }
        }
    }
    


    Related

    ライセンスを受けた: CC-BY-SA with attribution
    所属していない Stack Overflow
    ライセンスを受けた: CC-BY-SA with attribution
    所属していない Stack Overflow