17

ID がわからない場合、テキストボックスなどの要素を選択するにはどうすればよいですか?

その ID がわかっている場合は、次のように簡単に記述できます。

HtmlAgilityPack.HtmlNode node = doc.GetElementbyId(id);

しかし、テキスト ボックスの ID がわからず、Web ブラウザー コントロールで使用できる HtmlagilityPack の GetElementsByTagName メソッドが見つかりません。Web ブラウザ コントロールでは、次のように簡単に記述できます。

HtmlElementCollection elements = browser[i].Document.GetElementsByTagName("form");
foreach (HtmlElement currentElement in elements)
{

}

編集

これが私が話しているHTMLフォームです

<form id="searchform" method="get" action="/test.php">
<input name="sometext" type="text">
</form>

フォームのIDがわからないことに注意してください。また、同じページに複数のフォームが存在する場合があります。私が知っている唯一のことは「sometext」であり、この名前だけを使用してこの要素を取得したいと考えています。したがって、すべてのフォームを1つずつ解析してから、この名前「sometext」を見つける必要があると思いますが、どうすればよいですか?

4

3 に答える 3

40

formtagName ( forなど) でタグを探している場合は<form name="someForm">、次を使用できます。

var forms = document.DocumentNode.Descendants("form");

someFormname プロパティ ( forなど) でタグを探している場合は<form name="someForm">、次を使用できます。

var forms = document.DocumentNode.Descendants().Where(node => node.Name == "formName");

最後の例では、単純な拡張メソッドを作成できます。

public static class HtmlNodeExtensions
{
    public static IEnumerable<HtmlNode> GetElementsByName(this HtmlNode parent, string name)
    {
        return parent.Descendants().Where(node => node.Name == name);
    }

    public static IEnumerable<HtmlNode> GetElementsByTagName(this HtmlNode parent, string name)
    {
        return parent.Descendants(name);
    }
}

注: SelectNodesXPath を使用してドキュメントをクエリすることもできます。

var nodes = doc.DocumentNode.SelectNodes("//form//input");

フォームタグにあるページ上のすべての入力を提供します。

var nodes = doc.DocumentNode.SelectNodes("//form[1]//input");

ページの最初のフォームのすべての入力を提供します

于 2012-04-22T10:59:29.553 に答える
6

私はあなたがこのようなものを探していると思います

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml("....");

var inputs = doc.DocumentNode.Descendants("input")
    .Where(n => n.Attributes["name"]!=null && n.Attributes["name"].Value == "sometext")
    .ToArray();
于 2012-04-21T15:42:51.860 に答える
6

名前による任意のノード:

doc.DocumentNode.SelectNodes("//*[@name='name']")

名前による入力ノード:

doc.DocumentNode.SelectNodes("//input[@name='name']")
于 2015-04-10T07:19:43.570 に答える