如何在Web浏览器中单击特定按钮

时间:2015-02-01 10:22:10

标签: c# browser

我的网页上有大约10个按钮,几乎相同的HTML输入类,但我想在特定按钮上执行虚拟点击。

我该怎么做?

以下是其中一些:

<input name="" value="ذخيره يا چاپ&nbsp;" onclick="saveOrPrint()" class="fieldbutton" type="button">  
<input name="" value="ارسال&nbsp;" onclick="return sendEmail()" class="fieldbutton" type="button">  
<input name="" tabindex="" value="نمایش رکوردهای انتخاب شده" onclick="displaySelectedRows()" disabled="disabled" class="fieldbutton" type="button">  

我想点击第一个按钮。这段代码不起作用:

HtmlElementCollection classButton = webBrowser1.Document.All;
foreach (HtmlElement element in classButton)
{
    if (element.GetAttribute("type") == "button" &&
        element.GetAttribute("class") == "fieldbutton")
    {
        element.InvokeMember("click");
    }
}

所有代码:

 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlElement textElement = webBrowser1.Document.All.GetElementsByName("simpleSearch.value")[0];
        textElement.SetAttribute("value", "9789643775070");
        HtmlElement searchtype = webBrowser1.Document.All.GetElementsByName("simpleSearch.indexFieldId")[0];
        searchtype.SetAttribute("value", "221091");
        HtmlElement documenttype =
            webBrowser1.Document.All.GetElementsByName("bibliographicLimitQueryBuilder.biblioDocType")[0];
        documenttype.SetAttribute("value", "BF");
        HtmlElement button =
            webBrowser1.Document.GetElementsByTagName("input")
                .Cast<HtmlElement>()
                .FirstOrDefault(m => m.GetAttribute("type") == "submit");
        button.InvokeMember("click");

        HtmlElementCollection classButton = webBrowser1.Document.GetElementsByTagName("input");

        foreach (HtmlElement element in classButton)
        {
            var value = element.GetAttribute("value");
            if (value.Trim().ToLower().Equals("ذخيره يا چاپ"))
            {
                element.InvokeMember("click");
            }
        }
    }
    private void btn_LibraryManagement_NewCheckout_Click(object sender, EventArgs e)
    {
        webBrowser1.Navigate(@"http://opac.nlai.ir/opac-prod/search/searchBF.do");
        webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
    }

编辑:
这不是我的网站,我无法在此网站上进行任何更改。
帮助表示赞赏

3 个答案:

答案 0 :(得分:1)

你应该使用价值。试试这个:

HtmlElementCollection classButton = webBrowser1.Document.GetElementsByTagName("input"); 

foreach (HtmlElement element in classButton)

{
    var value = element.GetAttribute("value");

    if (value.Trim().ToLower().Equals("ذخيره يا چاپ"))
        {
           element.InvokeMember("click");
        }
}

答案 1 :(得分:0)

在构建页面时,您是否尝试为每个按钮添加一些唯一的“ID”(html属性)?之后,更容易识别出独特的行为。

<input id="print" name="" value="ذخيره يا چاپ&nbsp;" onclick="saveOrPrint()" class="fieldbutton" type="button">
<input  id="emailing" name="" value="ارسال&nbsp;" onclick="return sendEmail()" class="fieldbutton" type="button">
<input  id="selectedrows" name="" tabindex="" value="نمایش رکوردهای انتخاب شده" onclick="displaySelectedRows()" disabled="disabled" class="fieldbutton" type="button">

比你的foreach内部,例如:

if (element.GetAttribute("type") == "button" &&
    element.GetAttribute("id") == "emailing")
{
    element.InvokeMember("click");
}

答案 2 :(得分:0)

为每个标记添加id,并根据按钮ID调用click事件,而不是基于类。