2008-10-16 23 views
7

Tengo una página html abierta en mi objeto webbrowser, puedo ingresar bien el nombre de usuario y la contraseña, pero estoy atascado y no sé cómo enviar la información. Aquí está el código HTML para el nombre de usuario/contraseña presentar:VB.NET - Haga clic en el botón Enviar en la página Webbrowser

<div id="signin"> 
    <h2 class="ir"> 
     <em></em>Sign in</h2> 
    <form action="/login/" method="post"> 
    <input id="login-url" name="login[url]" 
      type="hidden" value="/characters/" /> 
    <input id="login-urlError" name="login[urlError]" 
      type="hidden" value="/account/?error=1" /> 
    <fieldset> 
     <ul> 
      <li class="row"> 
       <label for="login-username"> 
        Username <span class="req">*</span> 
       </label> 
       <input id="login-username" name="login[username]" 
         type="text" class="TextBox" value="" /> 
      </li> 
      <li class="row"> 
       <label for="login-password"> 
        Password <span class="req">*</span> 
       </label> 
       <input id="login-password" name="login[password]" 
         type="password" class="TextBox Password" value="" /> 
      </li> 
      <li class="but"> 
       <input name="login[submit]" type="image" 
         class="img" alt="Login &raquo;" 
         src="/_pub/img/hp/but-login.png" /> 
      </li> 
     </ul> 
    </fieldset> 
    </form> 
    <p> 
     <a href="/account/password-reset/">ACCOUNT TROUBLE?</a> 
    </p> 
</div> 

utilizo el siguiente para introducir el nombre de usuario y contraseña:

WebBrowser1.Document.GetElementById("login-username").SetAttribute("Value", Information.txtuser.Text) 
WebBrowser1.Document.GetElementById("login-password").SetAttribute("Value", Information.txtpass.Text) 

¿Qué debo usar para enviar la información ahora? Intenté obtener el elemento por nombre y seguí obteniendo el índice fuera del rango de error, el índice debería ser -1 o 0, pero así fue.

¡Su ayuda sería muy útil!

Respuesta

0

Puede tratar de dar una ID al formulario, para obtenerlo, y luego llamar a form.submit() desde una llamada de Javascript.

1

Esto parece funcionar fácilmente.


Public Function LoginAsTech(ByVal UserID As String, ByVal Pass As String) As Boolean 
     Dim MyDoc As New mshtml.HTMLDocument 
     Dim DocElements As mshtml.IHTMLElementCollection = Nothing 
     Dim LoginForm As mshtml.HTMLFormElement = Nothing 

     ASPComplete = 0 
     WB.Navigate(VitecLoginURI) 
     BrowserLoop() 

     MyDoc = WB.Document.DomDocument 
     DocElements = MyDoc.getElementsByTagName("input") 
     For Each i As mshtml.IHTMLElement In DocElements 

      Select Case i.name 
       Case "seLogin$UserName" 
        i.value = UserID 
       Case "seLogin$Password" 
        i.value = Pass 
       Case Else 
        Exit Select 
      End Select 

      frmServiceCalls.txtOut.Text &= i.name & " : " & i.value & " : " & i.type & vbCrLf 
     Next i 

     'Old Method for Clicking submit 
     'WB.Document.Forms("form1").InvokeMember("submit") 


     'Better Method to click submit 
     LoginForm = MyDoc.forms.item("form1") 
     LoginForm.item("seLogin$LoginButton").click() 
     ASPComplete = 0 
     BrowserLoop() 



     MyDoc= WB.Document.DomDocument 
     DocElements = MyDoc.getElementsByTagName("input") 
     For Each j As mshtml.IHTMLElement In DocElements 
      frmServiceCalls.txtOut.Text &= j.name & " : " & j.value & " : " & j.type & vbCrLf 

     Next j 

     frmServiceCalls.txtOut.Text &= vbCrLf & vbCrLf & WB.Url.AbsoluteUri & vbCrLf 
     Return 1 
End Function 
3

WebBrowser1.Document.GetElementById(*element id string*).InvokeMember("submit")

2

que es mi solución para algo similar a este problema.

System.Windows.Forms.WebBrowser www; 
void VerificarWebSites() 
{ 
      www = new System.Windows.Forms.WebBrowser(); 
      www.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(www_DocumentCompleted_login); 
      www.Navigate(new Uri("http://www.meusite.com.br")); 
} 
void www_DocumentCompleted_login(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e){    
      www.DocumentCompleted -= new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(www_DocumentCompleted_login); 
      www.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(www_DocumentCompleted_logado); 

      www.Document.Forms[0].All["tbx_login"].SetAttribute("value", "Gostoso"); 
      www.Document.Forms[0].All["tbx_senha"].SetAttribute("value", "abcdef"); 
      www.Document.GetElementById("btn_login").Focus(); 
      www.Document.GetElementById("btn_login").InvokeMember("click"); 
} 
void www_DocumentCompleted_logado(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e){ 
      System.IO.StreamWriter sw = new StreamWriter("c:\\saida_teste.txt"); 
      sw.Write(www.DocumentText); 
      sw.Close(); 
      MessageBox.Show(e.Url.AbsolutePath); 
} 
2

Busqué alguna solución para no utilizar el "SendKeys(CHR(13))" méthode que he utilizado para enviar cosas en el explorador. En este caso, yo estaba feliz de ver su

InvokeMember("click") 

pero no sé por qué usted sabe que usted tiene que escribir "clic" en ese país. De todos modos Gracias

1

Estoy bastante beneficiado con http://stackoverflow.com. Estaba deambulando de horas para iniciar sesión automáticamente y enviar desde la aplicación vb a otro sitio web. Debido a la ayuda de este sitio, puedo completar mi tarea

Tengo que iniciar sesión siguiendo la página web php.

<HTML> 

<body> 
<div align="center"><img src="banner.png" height="80px" /></div> 
<script type="text/javascript"> 
$(document).ready(function(){ 
      $("#login").validate(); 
      $("#login_container").css({'position': 'absolute', 
       'top' : (($(window).height()/2) - $("#login_container").height()/2)+'px'}); 
      $("#login_container").css({'left' : (($(window).width()/2) - $("#login_container").width()/2)+'px'}); 
     }); 
    </script> 
    <div id="login_container"> 
     <form name="login" id="login" action="?q=login" method="post"> 
     <table> 
      <tr><td>Username</td><td><input type="text" name="name" class="required"/></td></tr> 
      <tr><td>Password</td><td><input type="password" name="password" class="required"/></td></tr> 
      <tr><td></td><td><input type="submit" name="subimt" value="Login" /></td></tr> 
     </table> 
     </form> 
    </div> 
</body> 
</html> 

Para automático Inicie sesión y haga clic en He escrito el siguiente código de VB.Net. En form1 coloqué un botón y un control WebBrowser

Imports System.IO 
Imports System.Windows.Forms 



Public Class Form1 


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 


     WebBrowser1.Navigate("http://xyz.com") 



    End Sub 

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted 
     WebBrowser1.Document.GetElementById("name").SetAttribute("Value", "bharatlal") 
     WebBrowser1.Document.GetElementById("password").SetAttribute("Value", "mahato") 
     WebBrowser1.Document.GetElementById("subimt").Focus() 
     WebBrowser1.Document.GetElementById("subimt").InvokeMember("click") 
    End Sub 
End Class 
0
Private Sub bt_continue_Click(sender As Object, e As EventArgs) Handles bt_continue.Click 
    wb_apple.Document.GetElementById("phoneNumber").Focus() 
    wb_apple.Document.GetElementById("phoneNumber").InnerText = tb_phonenumber.Text 
    wb_apple.Document.GetElementById("reservationCode").Focus() 
    wb_apple.Document.GetElementById("reservationCode").InnerText = tb_regcode.Text 
    'SendKeys.Send("{Tab}{Tab}{Tab}") 
    'For Each Element As HtmlElement In wb_apple.Document.GetElementsByTagName("a") 
    'If Element.OuterHtml.Contains("iReserve.sms.submitButtonLabel") Then 
    'Element.InvokeMember("click") 
    'Exit For 
    ' End If 
    'Next Element 
    wb_apple.Document.GetElementById("smsPageForm").Focus() 
    wb_apple.Document.GetElementById("smsPageForm").InvokeMember("submit") 

End Sub 
0

Sólo tiene que seguir dos pasos para hacer clic en un código de cualquier botón usando.

  1. enfoque en el botón o elemento que se desea hacer clic

    WebBrowser1.Document.GetElementById("place id here").Focus()

  2. simular un click del ratón que utiliza este código siguiente

    SendKeys.Send("{ENTER}")

Cuestiones relacionadas