VB .NET- Fazendo o Login via WebBrowser (HtmlDocument)


 No artigo de hoje vou mostrar como podemos usar o componente WebBrowser para navegar e fazer o login em uma página web em um formulário Windows Forms usando os recursos do método GetElementById , SetAttribute e Invokemember.

O controle WebBrowser permite que você hospede páginas da Web e outros documentos habilitados para navegadores em suas aplicações Windows Forms.

O WebBrowser mantém uma lista de histórico de todas as páginas da Web visitadas durante uma sessão de navegação. Ao definir a propriedade Url, ocorre navegação para a URL especificada e o controle a adiciona ao final da lista do histórico.

A seguir o controle armazena as páginas Web dos sites visitados recentemente em um cache no disco rígido local. Cada página pode especificar uma data de expiração que indica quanto tempo ele permanecerá no cache. Assim,
quando o controle navega para uma página, ele economiza tempo ao exibir uma versão em cache, se disponível, em vez de baixar a página novamente.

Você pode usar a propriedade Refresh para forçar o WebBrowser a recarregar a página atual por meio de download, garantindo que o controle exibe a versão mais recente.

As principais propriedades do controle WebBrowser são :

Url - Obtém ou define o URL do documento atual. (equivale a chamar o método Navigate e passar URL especificada)
Navigate - Carrega o documento no local especificado
GoBack – Navega para a página anterior no histórico de navegação
GoForward - Navega para a próxima página no histórico de navegação
GoHome - Navega para a home page do usuário atual. (Opções Internet)
GoSearch - Navega para a página de pesquisa padrão do usuário atual.
Stop - Cancela qualquer navegação pendente e pára quaisquer elementos de página dinâmica, como, por exemplo, animações e sons de fundo.
Refresh - Recarrega o documento atualmente exibido no controle
Print - Imprime o documento exibido no momento no WebBrowser usando as configurações de página e de impressão atual.
ShowPrintDialog – exibe a caixa de diálogo para impressão
ShowPrintPreviewDialog - exibe a caixa de diálogo para visualizar a impressão


Os principais eventos são:

Navigating - Ocorre antes do controle navegar para um novo documento.(Disparado quando você define uma nova URL ou quando o usuário clica em um link)
Navigated - Ocorre quando o controle navegou para um novo documento e começou a carregá-lo. (Disparado antes do navegador iniciar o dowload da página)
ProgressChanged - Ocorre quando o controle tem informações atualizadas sobre o progresso do download de um documento para o qual ele está navegando. É disparado periodicamente durante o download. Informe quantos bytes foram baixados e quantos ainda são esperados.(você pode usar este evento para ativar a barra de progresso.)
DocumentCompleted - Ocorre quando o controle termina de carregar um documento.(Disparado quando a página foi completamente carregada.)
FileDownload - Ocorre quando o controle baixa um arquivo.
NewWindow - Ocorre antes que uma nova janela do navegador seja aberta


Você também pode manipular o conteúdo de uma página da Web por meio da propriedade Document , que contém um objeto HtmlDocument que fornece acesso gerenciado para o modelo de objeto de documento (DOM) HTML da página atual.

A classe HtmlDocument fornece acesso programático para um documento HTML hospedado pelo controle de WebBrowser .

Principais propriedades:

All - Obtém uma instância de HtmlElementCollection, que armazena todos os objetos de HtmlElement para o documento.
Body - Obtém um HtmlElement para a marca de BODY .
Forms - Obtém uma coleção de todos os elementos de <FORM> no documento.
Images - Obtém uma coleção de todas as marcações de imagem no documento.
Links - Obtém uma lista de todos os hiperlinks dentro deste documento HTML.
Title - Obtém ou define o valor de texto da marca de <TITLE> no documento HTML atual.
Url - Obtém o URL que descreve o local deste documento.

Principais Métodos:

CreateElement - Cria um novo HtmlElement do tipo especificado de marca HTML.
ExecCommand - Executa o comando especificado no documento.
GetElementById - Recupera um único HtmlElement usando o atributo ID do elemento como uma chave de pesquisa.
GetElementFromPoint - Recupera o elemento HTML localizado nas coordenadas específicas de cliente.
GetElementsByTagName - Recuperar uma coleção de elementos com a marca HTML especificada.
InvokeScript(String) - Executa uma função ativa de script definida em uma página HTML.
OpenNew - Obtém novo HtmlDocument para usar com o método de Write .
Write - Grava uma nova página HTML.

Neste artigo vamos usar os métodos GetElementById(), SetAttribute e InvokeMember para interagir com os elementos de uma página web no controle WebBrowser e realizar o login em um web site como o Yahoo.

Acessando página de login do Yahoo teremos no navegador FireFox a página abaixo:

Selecionando os controles para login da página e clicando com o botão direito do mouse, podemos exibir o código fonte da página selecionada usando a opção Código-fonte da seleção do FireFox.

Abaixo vemos o código desta parte da página e identificamos os elementos usados para realizar o login. Vamos usar esses valores para interagir com a página via WebBrowser.

 O que iremos fazer é fornecer digitar os valores de usuário e senha em um formulário Windows Forms e navegar até a página de login do Yahoo e atribuir os valores digitados na página enviando os dados via webbrowser.

Recursos usados :

Criando o projeto no VS 2013 Express Edition

Abra o VS 2013 Express for Windows desktop e clique em New Project;

A seguir selecione Visual Basic -> Windows Forms Application;

Informe o nome WebBrowser_Login e clique no botão OK;

No formulário form1.vb vamos incluir os seguintes controles a partir da ToolBox:

Disponha os controles no formulário conforme o leiaute da figura abaixo:

Agora no evento Click do botão de comando Ir Para inclua o código que irá navegar até a página de Login do Yahoo:

 Private Sub BtnIrPara_Click(sender As Object, e As EventArgs) Handles btnIrPara.Click
        WebBrowser1.Navigate("https://login.yahoo.com/")
End Sub

Agora no evento Click do botão de comando Login inclua o código abaixo:

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        Try
            WebBrowser1.Document.GetElementById("username").SetAttribute("value", txtUsuario.Text)
            WebBrowser1.Document.GetElementById("passwd").SetAttribute("value", txtSenha.Text)
            WebBrowser1.Document.GetElementById("signin").InvokeMember("click")
        Catch ex As Exception
            MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
End Sub

Neste código estamos obtendo o elemento 'username' e atribuindo a ele o valor informando na caixa de texto txtUsuario.Text : WebBrowser1.Document.GetElementById("username").SetAttribute("value", txtUsuario.Text)

A seguir obtemos o elemento 'passwd' e atribuímos a ele o valor definido na caixa de texto txtSenha.Text:  WebBrowser1.Document.GetElementById("passwd").SetAttribute("value", txtSenha.Text)

Depois invocamos o método click do membro através do método InvokeMember("click").

Executando o projeto, informando o nome do usuário e sua senha e navegando até a página de login do Yahoo iremos obter:

Clicando no botão de Login os valores serão atribuídos aos campos do formulário e o evento click acionará o botão de enviar realizando o login no Yahoo:

Lembrando que o procedimento vale para praticamente qualquer formulário web.

Você pode incrementar o código incluindo outras funcionalidades do controle WebBrowser.

Pegue o projeto completo aqui:  Navegador_VBNET.zip

Então disse Jesus aos seus discípulos: Se alguém quiser vir após mim, renuncie-se a si mesmo, tome sobre si a sua cruz, e siga-me;
Mateus 16:24

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti