InvokeMember(“click”)webBrowser帮助

我试图通过weBrowser自动化一个网页,我试图点击的按钮没有ID只有一个值。 这是它的html代码:

 

我不能使用GetElementById因为按钮没有ID。 如果我做

 HtmlElement goButton = this.webBrowser1.Document.All["Accept"]; goButton.InvokeMember("click"); 

我的脚本停止显示空引用错误,突出显示“goButton.InvokeMember(”click“);”

如果我做

 var inputControls = (from HtmlElement element in webBrowser1.Document.GetElementsByTagName("input") select element).ToList(); HtmlElement submitButton = inputControls.First(x => x.Name == "Accept"); 

我的脚本在“HtmlElement submitButton”行给出了一个“Sequence contains no matching element”错误,有时页面上有多个这样的Accept按钮,所以我需要能够分辨出每个按钮之间的区别或者至少能够在没有脚本破坏的情况下点击一个

任何有关这方面的帮助将不胜感激

你正试图找一个按钮标签,对吗? 如果是这种情况, GetElementsByTagName("input")可能应该是GetElementsByTagName("button") 。 按钮的名称也不会是Accept,这将是InnerText属性。 如果您不确定该按钮是否存在,那么您最好使用FirstOrDefault并检查空返回值,因为如果没有匹配,’. First ‘将崩溃并刻录。

至于如果有多个“接受”按钮,如何区分按钮之间的区别,我认为需要更多思考。

此代码未经测试,但可能更接近您的需要

 var buttonControls = ( from HtmlElement element in webBrowser1.Document.GetElementsByTagName("button") select element ).ToList(); HtmlElement submitButton = buttonControls.FirstOrDefault(x => x.InnerText == "Accept"); if (submitButton != null) { submitButton.InvokeMember("click"); } else { //didn't find it } 

看起来页面中没有匹配的元素。 您确定该按钮位于当前页面上,而不是嵌入式框架中吗?

无论如何,你需要进行错误检查。 不应故意引发NullReferenceException。