我正在尝试通过weBrowser自动化网页,而我尝试点击的按钮只有一个ID值。这是它的html代码:
<td width='10%' align='center'><button class="buttonf" onclick="window.location='staticpage.php?accept=123456' ">Accept</button></td>
我无法使用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按钮,所以我需要能够分辨出每个按钮之间的区别,或者至少能够在没有脚本破坏的情况下点击一个
非常感谢任何帮助
答案 0 :(得分:3)
您正在尝试找到按钮标签,对吗?如果是这种情况,GetElementsByTagName("input")
可能应该是GetElementsByTagName("button")
。按钮的名称也不会被接受,那将是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
}
答案 1 :(得分:0)
看起来页面中没有匹配的元素。您确定该按钮位于当前页面上,而不是嵌入式框架中吗?
无论如何,您需要进行错误检查。不应故意引发NullReferenceException。