C# 如何单击此javascript按钮?

C# 如何单击此javascript按钮?,c#,.net,shdocvw,C#,.net,Shdocvw,在我试图登录的网页中间,我有以下代码 <tr> <td colspan="2" align="center"><!--mstheme--><font face="Trebuchet MS, Arial, Helvetica"> <br> <a href="javascript:SubmitAction()"> <IMG SRC="images/logon.g

在我试图登录的网页中间,我有以下代码

   <tr>
   <td colspan="2" align="center"><!--mstheme--><font face="Trebuchet MS, Arial, Helvetica">

       <br>
       <a href="javascript:SubmitAction()">
          <IMG SRC="images/logon.gif" WIDTH="47" HEIGHT="43" NATURALSIZEFLAG="3" BORDER="0">
       </a>


   <!--mstheme--></font></td>


我想执行SubmitAction()代码,它将获取我的凭据并让我登录。使用.NET中的WebBrowser很好,因为我可以使用“invokescript”。但是我不能用shdocvw来做这件事。如何单击或以其他方式执行此操作,尤其是在元素没有id或标记的情况下

下面是我的函数当前的样子:

        private void webBrowser1_DocumentCompleted(object pDisp, ref object URL)
    {
        while (webBrowser.ReadyState < SHDocVw.tagREADYSTATE.READYSTATE_LOADED) { }
        //we are attempting to log in
        if (loggingIn)
        {
            mshtml.HTMLDocumentClass doc = webBrowser.Document as mshtml.HTMLDocumentClass;                
            doc.getElementById("Username").setAttribute("value", "MLAPAGLIA");
            doc.getElementById("Password").setAttribute("value", "PASSWORD");

            mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
            win.execScript("SubmitAction()", "javascript");

            loggingIn = false;
            return;
        }
private void webBrowser1\u文档已完成(对象pDisp,参考对象URL)
{
而(webBrowser.ReadyState

这不是实现这一点的理想方法,使用事件列表是更好的做法

在JQuery中,应该是

    <a href="#" id="someid">

$('#someid').bind("click", function() { .. do whatever });

$('#someid').bind(“click”,function(){..do which});
这样您就不必纠缠代码逻辑和语义标记。

试试(注释后编辑):

一些有趣的链接:


我已将您的代码添加到第一篇文章中,添加了我的函数当前的样子。当我运行该程序时,用户名和密码已成功设置,但不会触发登录函数。当我调试代码时,该程序从未通过doc.parentWindow分配操作。有什么想法吗?不确定,请检查我的编辑-测试现在我已经完成了这项工作,它对我来说没有任何问题。很奇怪,当我将所有这些代码放在同一个函数中时,它会正确执行。如果我添加一个事件处理程序“webBrowser.DocumentComplete+=webBrowser1\u DocumentCompleted;”,则代码将不会执行..现在将进行一些调试。即使while循环处于暂停状态,它仍会出现,直到文档“就绪”,它离开循环时还没有准备好。在win=doc.parentWindow分配之前,我使用调试停止点运行该程序,它将正常运行。如果只运行正常调试,而不使用停止点,它将失败。win将被定义为null。我当前在另一个while循环中使用该分配,并且它将一直分配,直到win变量出现不再为空…好的-也许您只需要更改while来检查
tagREADYSTATE.READYSTATE\u COMPLETE
,这应该可以做到这一点…如果有帮助,请不要忘记投票/标记答案。。。
    <a href="#" id="someid">

$('#someid').bind("click", function() { .. do whatever });
using SHDocVw;
using mshtml;


SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
ie.Visible = true;
object o = new object();
ie.Navigate("http://www.google.com", ref o, ref o, ref o, ref o);

while (!(ie.ReadyState >= tagREADYSTATE.READYSTATE_LOADED))
       Application.DoEvents();

var doc = ie.Document;

var win = (IHTMLWindow2)doc.parentWindow;
// here you call the Javascript
win.execScript("SubmitAction();", "javascript");