InvokeMember(“click”)webBrowser帮助

时间:2010-04-16 16:05:48

标签: c# .net browser

我正在尝试通过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按钮,所以我需要能够分辨出每个按钮之间的区别,或者至少能够在没有脚本破坏的情况下点击一个

非常感谢任何帮助

2 个答案:

答案 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。