gpt4 book ai didi

c# - Htmlagilitypack 中的 GetElementsByTagName

转载 作者:可可西里 更新时间:2023-11-01 07:49:40 24 4
gpt4 key购买 nike

如何选择一个元素,例如文本框,如果我不知道它的 ID?

如果我知道它的 id 那么我可以简单地写:

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

但是我不知道文本框的 ID,而且我在 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”,我只想使用这个名称来获取这个元素。所以我想我必须一个一个地解析所有表单,然后找到这个名称“sometext”,但我该怎么做呢?

最佳答案

如果您要通过标签名称查找标签(例如 form 表示 <form name="someForm"> ),那么您可以使用:

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

如果您要通过名称属性查找标签(例如 someForm<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);
}
}

注意:您也可以使用 SelectNodes和 XPath 来查询您的文档:

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

将为您提供页面上表单标签中的所有输入。

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

将为您提供页面上第一个表单的所有输入

关于c# - Htmlagilitypack 中的 GetElementsByTagName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10260255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com