關於webbrowser控制項自動登陸的問題

來源:互聯網
上載者:User
樓主dtb(陳少)2004-03-04 22:16:55 在 VB / 網路編程 提問

請問怎麼用webbrowser自動登陸www.jp168.com,(沒有架構的網站試過了可以,這個有架構,登陸頁面還會快顯視窗,搞得我暈暈的)  
  登陸成功後從返回頁面裡取出input控制項uid的值 問題點數:80、回複次數:4

1 樓cutemouse(為夢而生)回複於 2004-05-09 23:54:21 得分 80

控制網頁的FORMS行為  
   
  Private   Sub   Command2_Click()  
          With   WebBrowser1.Document.Forms(0)  
                  .c2.Checked   =   1  
                  .r1(1).Checked   =   1  
          End   With  
  End   Sub  
   
   
  Private   Sub   Command2_Click()  
          With   WebBrowser1.Document.Forms(0)  
                  .d1.Options(1).Selected   =   1  
          End   With  
  End   Sub  
   
  web.Document.getElementsByName("D1").Item(0).selectedIndex   =   1  
   
  ==============================================  
  <input   type="radio"   value="n"   checked   name="notecome">普通  
  <input   type="radio"   value="c"   name="notecome">原創  
  <input   type="radio"   value="z"   name="notecome">轉帖  
  <input   type="button"   value="發送提交"   name="button"  
   
  比如一個網頁裡有如上代碼  
  我想選擇原創  
  webbrowser中怎麼寫  
   
   
  Private   Sub   Command1_Click()  
          WebBrowser1.Navigate   "c:\ggg.html"  
  End   Sub  
   
  Private   Sub   Command2_Click()  
          Dim   x  
           
          For   Each   x   In   WebBrowser1.Document.All("notecome")  
                  If   x.Value   =   "c"   Then  
                          x.Checked   =   True  
                  End   If  
          Next  
  End   Sub  
   
  ============================================================================================  
  假設你的HTML代碼如下:  
   
  <html>  
  <script>  
      function   abcd(){  
          alert("haha");  
          return   false;  
      }  
  </script>  
   
  <body>  
      <a   id   =   'xxx'   href=#   onclick="abcd()">ggggg</a>  
  </body>  
  </html>  
   
  VB代碼如下:  
  Private   Sub   Command1_Click()  
          WebBrowser1.Navigate   "http://www.applevb.com/script_test.html"  
  End   Sub  
   
  Private   Sub   Command2_Click()  
          Dim   a,   b  
          Dim   d   As   IHTMLDocument2  
           
          For   Each   a   In   WebBrowser1.Document.All  
                  Debug.Print   a.tagName  
                  If   (a.tagName   =   "SCRIPT")   Then  
   
                  End   If  
                  If   (a.tagName   =   "A")   Then  
                          If   a.Id   =   "xxx"   Then  
                                  a.FireEvent   ("onclick")  
                          End   If  
                  End   If  
          Next  
   
  點擊Command1瀏覽這個網頁,點擊Command2運行其中的指令碼abcd。  
   
   
  ==============================================  
   
  怎麼編程把使用者名稱,密碼提交到網頁上的登入頁?  
  首先在程式中加入Webbrowser控制項並加入引用   Microsoft   HTML   Object   Library。  
  假設你的HTML頁面表單代碼如下:  
  <form   method="POST"   action="http://chen/dll/chat/chatmain.exe/RegUser">  
      <p>請填寫下面表單註冊(*項為必添項)</p>  
      <p>*姓名<input   type="text"   name="Name"   size="20"></p>  
      <p>*暱稱<input   type="text"   name="NickName"   size="20"></p>  
      <p>電子郵件<input   type="text"   name="EMail"   size="20"></p>  
      <p>*密碼<input   type="text"   name="Password"   size="20"></p>  
      <p><input   type="submit"   value="提交"   name="B1"><input   type="reset"   value="全部重寫"   name="B2"></p>  
  </form>  
  注意其中元素的type、Name、value屬性。然後VB中的代碼如下:  
  Private   Sub   Command1_Click()  
          WebBrowser1.Navigate   "http://chen/chat/newuser.htm"  
  End   Sub  
   
  Private   Sub   WebBrowser1_DocumentComplete(ByVal   pDisp   As   Object,   URL   As   Variant)  
          Dim   vDoc,   vTag  
          Dim   i   As   Integer  
               
          Set   vDoc   =   WebBrowser1.Document  
          List1.Clear  
          For   i   =   0   To   vDoc.All.length   -   1  
                  If   UCase(vDoc.All(i).tagName)   =   "INPUT"   Then  
                          Set   vTag   =   vDoc.All(i)  
                          If   vTag.Type   =   "text"   Or   vTag.Type   =   "password"   Then  
                                  List1.AddItem   vTag.Name  
                                  Select   Case   vTag.Name  
                                          Case   "Name"  
                                                  vTag.Value   =   "IMGod"  
                                          Case   "NickName"  
                                                  vTag.Value   =   "IMGod"  
                                          Case   "Password"  
                                                  vTag.Value   =   "IMGodpass"  
                                          Case   "EMail"  
                                                  vTag.Value   =   "IMGod@paradise.com"  
                                  End   Select  
                          ElseIf   vTag.Type   =   "submit"   Then  
                                  vTag.Click  
                          End   If  
                  End   If  
          Next   i  
  End   Sub  
  點擊Command1就可以自動填表並提交了。    
   
   
  =====================================================================================  
  調用forms下的Submit控制項的Click事件,我會做,但我不想這麼做.  
   
  有沒有辦法直接調用類似於:web1.document.forms.submit,這句語句我怎麼寫都不成功  
  是這個  
  Webbrowser1.document.formName.submit()  
   
  不能用,formname為form1所以我調用Webbrowser1.document.form1.submit  
  出錯類型:對象不支援該屬性或方法,  
  然後調用Webbrowser1.document.forms(0).submit()  
  出錯類型同上  
  Private   Sub   Command1_Click()  
          WebBrowser1.Navigate   "http://localhost/webapplication2/MyLogonPage.aspx"  
  End   Sub  
   
  Private   Sub   Command2_Click()  
          WebBrowser1.Document.All("Form1").submit  
  End   Sub  
  <form   name="form1"   method="post"   action="aa.asp">  
  ......  
  <input   name="reset"   type="reset"   vlaue="reset"   class="button">  
  </form>  
  我本想把reset的type改成submit   再提交,可出錯,type是唯讀屬性,不能修改,我只要有辦法把這頁面遞交出去就行,當然,用POST也不行,參數太多,組合方式太多  
   
   
  你用下面的代碼試一下你的頁面:  
   
   
  Private   Sub   Command1_Click()  
          WebBrowser1.Navigate   "http://oakhome.xicp.net/webapplication2/MyLogonPage.aspx"  
  End   Sub  
   
  Private   Sub   Command2_Click()  
          Dim   x  
           
          On   Error   Resume   Next  
          For   Each   x   In   WebBrowser1.Document.All  
                  List1.AddItem   x.Name  
          Next  
  End   Sub  
   
  看看在List1裡面列出來的頁面元素的名字有沒有Form1  
  找到原因了,你的頁面是這樣的:  
  <input   language="javascript"   onclick="if   (typeof(Page_ClientValidate)   ==   'function')   Page_ClientValidate();   "   name="Submit1"   id="Submit1"   type="submit"   value="Submit"   />  
  你把name="Submit1"   改成name="Submit"肯定就不會成功了,很不幸的是我要提交的頁面中就有這樣一句,現在可有辦法解決嗎???  
   
  =======================================================================  
  使用WebBrowser_V1接受訊息  
   
  Private   WithEvents   WebMessage   As   WebBrowser_V1  
   
  Private   Sub   Form_Load()  
      Set   WebMessage   =   WebBrowser1.Object  
  End   Sub  
   
  Private   Sub   WebMessage_NewWindow(ByVal   URL   As   String,   ByVal   Flags   As   Long,   ByVal   TargetFrameName   As   String,   PostData   As   Variant,   ByVal   Headers   As   String,   Processed   As   Boolean)  
   
  '這裡有Flags變數可以取得表單應有的狀態  
   
  End   Sub  
   
  具體值需要你自己去試試看。物件瀏覽器裡面沒有  
   
  =======================================================================================================  
   
  通過下面的方法遍曆頁面中的IFrame:  
   
  Sub   EnumFrames(ByVal   wb   As   WebBrowser)  
  Dim   pContainer   As   olelib.IOleContainer  
  Dim   pEnumerator   As   olelib.IEnumUnknown  
  Dim   pUnk   As   olelib.IUnknown  
  Dim   pBrowser   As   SHDocVw.IWebBrowser2  
   
        Set   pContainer   =   wb.Object.Document  
         
        '   Get   an   enumerator   for   the   frames  
        If   pContainer.EnumObjects(OLECONTF_EMBEDDINGS,   pEnumerator)   =   0   Then  
         
              Set   pContainer   =   Nothing  
               
              '   Enumerate   and   refresh   all   the   frames  
              Do   While   pEnumerator.Next(1,   pUnk)   =   0  
                     
                    On   Error   Resume   Next  
                     
                    '   Clear   errors  
                    Err.Clear  
                     
                    '   Get   the   IWebBrowser2   interface  
                    Set   pBrowser   =   pUnk  
         
                    If   Err.Number   =   0   Then  
                          Debug.Print   "Frame:   "   &   pBrowser.LocationURL  
                    End   If  
         
              Loop  
               
              Set   pEnumerator   =   Nothing  
         
        End   If  
         
  End   Sub  
   
   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.