C# 如何在web浏览器中单击特定按钮

C# 如何在web浏览器中单击特定按钮,c#,browser,C#,Browser,在我的网页中,大约有10个按钮具有几乎相同的HTML输入类,但我想在特定的按钮上执行虚拟单击 我该怎么做 以下是其中一些: <input name="" value="ذخيره يا چاپ&nbsp;" onclick="saveOrPrint()" class="fieldbutton" type="button"> <input name="" value="ارسال&nbsp;" onclick="return sendEmail()" clas

在我的网页中,大约有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">  
所有代码:

 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;
    }
private void webBrowser1\u DocumentCompleted(对象发送方,WebBrowserDocumentCompletedEventArgs e)
{
HtmleElement textElement=webBrowser1.Document.All.GetElementsByName(“simpleSearch.value”)[0];
SetAttribute(“值”,“9789643775070”);
HtmleElement searchtype=webBrowser1.Document.All.GetElementsByName(“simpleSearch.IndexFieldDid”)[0];
SetAttribute(“值”,“221091”);
HtmleElement文档类型=
webBrowser1.Document.All.GetElementsByName(“书目LimitQueryBuilder.biblioDocType”)[0];
documenttype.SetAttribute(“值”、“BF”);
HtmlElement按钮=
webBrowser1.Document.GetElementsByTagName(“输入”)
.Cast()
.FirstOrDefault(m=>m.GetAttribute(“类型”)==“提交”);
按钮。调用成员(“单击”);
HtmlElementCollection classButton=webBrowser1.Document.GetElementsByTagName(“输入”);
foreach(类按钮中的HtmlElement元素)
{
var value=element.GetAttribute(“值”);
如果(value.Trim().ToLower().Equals(“值”))
{
元素。调用成员(“单击”);
}
}
}
私有无效btn\u库管理\u新建签出\u单击(对象发送者,事件参数e)
{
webBrowser1.导航(@“http://opac.nlai.ir/opac-prod/search/searchBF.do");
webBrowser1.DocumentCompleted+=webBrowser1_DocumentCompleted;
}
编辑:
这不是我的网站,我无法在此网站上更改任何内容。

感谢您的帮助

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


将id添加到每个标记中,并基于按钮id而不是基于类调用单击事件。

您应该使用value。试试这个:

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

foreach (HtmlElement element in classButton)

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

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

我曾经用sending
PageDown
键向下滚动到按钮,然后将鼠标指针移到按钮上并单击。这很有趣,但对程序员来说从来没有用过。因为网站
可能会更改
或客户的
分辨率
可能会导致此错误。有没有安全的方法可以做到这一点?是的,因为我的应用程序的用户是我自己,所以我就是这样做的;)难道没有任何方法可以使用值或方法查找元素吗?它不是我的网站!!如果我能控制这个网站,实际上我和我的Id或名字来做这件事。它不是我的网站!!如果我能控制这个网站,实际上我和Id或姓名就可以这样做。不应该将
类型
更改为
?我已经以另一种格式使用了这个代码,但它不起作用。我想原因可能是:值是unicode而不是char,而且这些是节点而不是属性。非常感谢,我发现了问题,但我无法解决它!在
webBrowser_DocumentCompleted
中,我有一些其他代码在前面,我单击了一些其他按钮(像这样)。当点击一个按钮时,页面改变了,但在旧页面上运行了更多的代码。。。并得出错误的结果。我怎样才能解决这个问题?谢谢lot@ProgramChef请将您的代码和详细信息发布在问题字段中。@ProgramChef我用value.Trim().ToLower().Equals()方法更新了代码。试试看。
<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">
if (element.GetAttribute("type") == "button" &&
    element.GetAttribute("id") == "emailing")
{
    element.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");
        }
}