たとえば、要素を選択するにはどうすればよいですか。 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」を見つける必要があると思いますが、どうすればよいですか?
TagName(<form name="someForm">
のform
など)でタグを探している場合は、次を使用できます。
var forms = document.DocumentNode.Descendants("form");
名前プロパティ(<form name="someForm">
の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);
}
}
注:SelectNodes
およびXPathを使用してドキュメントをクエリすることもできます。
var nodes = doc.DocumentNode.SelectNodes("//form//input");
フォームタグにあるページ上のすべての入力を提供します。
var nodes = doc.DocumentNode.SelectNodes("//form[1]//input");
ページの最初のフォームのすべての入力を提供します
名前による任意のノード:
doc.DocumentNode.SelectNodes("//*[@name='name']")
名前による入力ノード:
doc.DocumentNode.SelectNodes("//input[@name='name']")
私はあなたがこのようなものを探していると思います
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();