首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击(“InvokeMember”) webBrowser帮助

单击(“InvokeMember”) webBrowser帮助
EN

Stack Overflow用户
提问于 2010-04-17 00:05:48
回答 2查看 9.7K关注 0票数 1

我正在尝试通过weBrowser自动化网页,而我尝试单击的按钮没有ID,只有值。下面是它的html代码:

代码语言:javascript
复制
<td width='10%' align='center'><button class="buttonf" onclick="window.location='staticpage.php?accept=123456' ">Accept</button></td>

我无法useGetElementById,因为按钮没有ID。如果我有

代码语言:javascript
复制
HtmlElement goButton = this.webBrowser1.Document.All["Accept"];
goButton.InvokeMember("click");

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

如果我这样做了

代码语言:javascript
复制
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按钮,所以我需要能够区分每个按钮之间的区别,或者至少能够在不中断脚本的情况下单击一个按钮

在这方面的任何帮助都将非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-17 08:49:11

您正在尝试查找按钮标记,对吗?如果是这样的话,GetElementsByTagName("input")可能应该是GetElementsByTagName("button")。按钮的名称也不会被接受,这将是InnerText属性。如果不确定按钮是否存在,最好使用FirstOrDefault并检查返回值是否为空,因为如果没有匹配,'.First‘将崩溃并烧毁。

至于如何区分不同的按钮,如果有多个接受按钮,我认为需要更多的思考。

这段代码未经测试,但它可能更接近您需要的内容

代码语言:javascript
复制
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
}
票数 3
EN

Stack Overflow用户

发布于 2010-04-17 07:48:07

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2654442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档