如何使用类以编程方式单击输入元素

时间:2018-11-02 18:44:30

标签: c# html

尝试以编程方式单击公共网站上的输入type = submit按钮,其代码如下所示,该代码位于其他div类标记中。我正在使用Visual Studio 2017和C#。我对该网页上感兴趣的部分代码如下,并尝试单击“ btn primary”输入类型。

         <div class="button_box_buttons">
            <input type="submit" class="btn primary" value="Sign In"
            onclick="return login_jsp.saveRemember && login_jsp.saveRemember() || true;" />
        </div>

我的代码如下。

            oIEMain = new SHDocVw.InternetExplorer()
            {
            Visible = true
            };
            Log("Navigate to Homepage: " + sURL);
            oIEMain.Navigate(sURL);
            HTMLDocument HTMLDoc = (HTMLDocument)oIEMain.Document;

            ....
            mshtml.HTMLElementCollection HtmlElementcol = (mshtml.HTMLElementCollection)HTMLDoc.getElementsByTagName("input");

           foreach (HtmlElement eleme in HtmlElementcol)
           {
            //Check the attributtes you want
            if (eleme.GetAttribute("className") == "btn primary")
            {
                //Check even the text if you want
                if (eleme.InnerText == "Sign In")
                {
                    //Invoke your event
                    eleme.InvokeMember("click");
                }
            }
          }

运行此代码,我得到未处理的异常:“ mshtml.HTMLElementCollection”。该操作失败,因为具有以下错误的IID为'{3050F56B-98B5-11CF-BB82-00AA00BDCE0B}'的接口的COM组件上的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT的异常:0x80004002(E_NOINTERFACE)) 。'

如何获得点击按钮?

谢谢!

2 个答案:

答案 0 :(得分:0)

所以我首先看到的是您需要等待HTML下载。

oIEMain.Navigate(sURL);无法同步运行。

因此,任何与页面HTML兼容的内容都需要保留在oIEMain.DocumentCompleted事件处理程序中。

可能足以解决您的错误。您没有在问题中提供足够的信息来确定确定

答案 1 :(得分:-1)

最终解决了该问题。下面是使它起作用的相关代码。希望它可以帮助别人。

        eContinue = (HTMLHtmlElement)HTMLDoc.getElementsByTagName("input").item(4);
        eContinue.click();