C# 在Html元素的深层堆栈中获取元素
我正在使用C#中的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
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
无法正确加载页面,我添加了一些关于这方面的更多信息