0

ログインしようとしているWebページの途中で、次のコードがあります

   <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()コードを実行したいと思います。「invokescript」を使用できるため、.NETからWebBrowserを使用すると問題なく動作します。ただし、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;
        }
4

2 に答える 2

1
<a href="#" onclick="SubmitAction();return(false);">

これはこれを行うための理想的な方法ではなく、イベントリスナーを使用するためのより良い方法です。

JQueryでは次のようになります

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

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

そうすれば、コードロジックとセマティックマークアップをタグ付けしないでください。

于 2011-08-20T02:33:44.937 に答える
1

試してください(コメント後に編集):

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");

いくつかの興味深いリンク:

于 2011-08-20T02:43:00.540 に答える