我正在尝试通过weBrowser自动化网页,而我尝试单击的按钮没有ID,只有值。下面是它的html代码:
<td width='10%' align='center'><button class="buttonf" onclick="window.location='staticpage.php?accept=123456' ">Accept</button></td>我无法useGetElementById,因为按钮没有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 matching element”错误,有时页面有多个这样的Accept按钮,所以我需要能够区分每个按钮之间的区别,或者至少能够在不中断脚本的情况下单击一个按钮
在这方面的任何帮助都将非常感谢。
发布于 2010-04-17 08:49:11
您正在尝试查找按钮标记,对吗?如果是这样的话,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
}发布于 2010-04-17 07:48:07
看起来页面中没有匹配的元素。是否确定按钮位于当前页面上,而不是嵌入框架中?
无论如何,你需要进行错误检查。不应故意引发NullReferenceException。
https://stackoverflow.com/questions/2654442
复制相似问题