Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Html元素的深层堆栈中获取元素_C#_Html_Asp.net_.net - Fatal编程技术网

C# 在Html元素的深层堆栈中获取元素

C# 在Html元素的深层堆栈中获取元素,c#,html,asp.net,.net,C#,Html,Asp.net,.net,我正在使用C#中的WebBrowserobject导航到一个网站,我想得到一个存在于该网站中的Html元素,但该元素位于其他元素的一个很深的丑陋堆栈中,实际上地址是: html->frameset->frame#mainFrame->html->body->div->table#AutoNumber->tbody->tr->td->div->form#lglform->table->tbody->tr tr->td->input#Button1 当我尝试使用GetElementsByTagNam

我正在使用C#中的
WebBrowser
object导航到一个网站,我想得到一个存在于该网站中的Html元素,但该元素位于其他元素的一个很深的丑陋堆栈中,实际上地址是:

html->frameset->frame#mainFrame->html->body->div->table#AutoNumber->tbody->tr->td->div->form#lglform->table->tbody->tr tr->td->input#Button1

当我尝试使用
GetElementsByTagName(“输入”)
时,我意识到我必须首先找到该项的父项,为此,我还必须找到该项的父项,以此类推。
有没有办法定义单个
HtmlElement
并直接将其设置为该元素,而无需通过所有父元素

更新
由于GetElementById,我得到null,因为
WebBrowser
无法正确加载网站,即使我使用
DocumentCompleted
事件来确保网站在ie inspector中的外观如下:

但是WebBrowser对象只是加载这个HTML


有没有办法使
WebBrowser
对象收集所有HTML代码?

或者有没有其他好方法来实现我的目标?

由于您的输入ID为
按钮1
,请使用。如果做不到这一点,您必须查询
webBrowser.Document.All
,它是HTML文档中所有元素的集合

HtmlElement input = webBrowser1.Document.GetElementById("Button1");

您可以使用HtmlAgilitypack并通过其Id
按钮1
获取元素:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(/*html data here*/);
var InputButton = doc.GetElementbyId("Button1");

//编辑:1不知何故忽略了您正在使用webbrowser控件的事实,MattyMo的答案在这里似乎更简单、更合适。

框架已经包含
GetElementById
,您不需要HtmlAgilityPack:)是的。我完全忽略了webbrowser控件。@GuillaumeBeauvois我尝试了GetElementById,结果为空。您能提供一些代码吗?您确定DOM结构和id/类值吗?@GuillaumeBeauvois我找到了获取null的原因,并为您添加了更多信息我真的不知道我不是网站开发人员,我只是尝试使用
webBrowser
对象填充一些文本字段,按下页面中的按钮并以编程方式获得结果。谢谢对于您的答案,我尝试了GetElementByID,但结果为空。你能告诉我如何从html页面获取所有元素及其子元素吗?@MasihAkbari当然,使用
webBrowser.Document.all
,这就是对所有元素的访问。如果元素存在,奇怪的是,你会得到null。我不太熟悉webBrowser controler,但可能您正在搜索,即使文档未完全创建。可能使用
WebBrowser.OnDocumentCompleted
来确保所有内容都已加载?@mattytommo问题是
WebBrowser
无法正确加载页面,我添加了一些关于这方面的更多信息