Inquiridor
RESTARTAR O WEBBROWSER VB.NET

Pergunta
-
Pessoal é o seguinte :
Tenho uma aplicação que faz o login no Site da Sefaz Bahia, só para o usuário não ter que ficar digitando a senha manualmente, esse usuário acessa com várias senhas diferentes.
Utilizo o WebBrowser para controlar essa rotina.
O problema é que eu não consigo trocar de usuário (entrar com outro usuário) se eu não fechar o aplicativo antes e mesmo clicando em login onde digito o usuário e senha ele já acessa o mesmo usuário logado. Isso acontece tb no navegador normal sem usar o vb.net, ou seja, quando preciso trocar de usuário logado eu tenho que fechar o navegador que estou usando para depois entrar novamente com outro usuário e senha e o site não tem a opção de logoff.
Aí eu lhes pergunto : Como faço para simular no Vb.net essa saída e entrada no navegador para permitir que eu consiga trocar de usuário sem precisar fechar o meu aplicativo?
Eu tentei usar o método Dispose: Primeiro eu crio em tempo de execução o Controle WebBrowser, depois destruo ele com o dispose e em seguida crio denovo, mas não deu certo.
Por favor me ajudem....
Muito obrigado desde já.
Todas as Respostas
-
-
Herbert meu código está da seguinte forma :
o Erro acontece quando eu tento criar o controle e acessar novamente no
Button5_Click
Dim wb As New WebBrowser 'Cria o controle quando o form é aberto Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load CriarWebBrowser() End Sub Sub CriarWebBrowser() 'Adiciona no form Me.Controls.Add(wb) 'Propriedades Me.wb.Location = New System.Drawing.Point(12, 12) Me.wb.MinimumSize = New System.Drawing.Size(20, 20) Me.wb.Name = "wb" Me.wb.Size = New System.Drawing.Size(946, 250) Me.wb.TabIndex = 0 wb.Navigate("http://nfe.sefaz.ba.gov.br/servicos/nfe/Modulos/Geral/NFENC_login.aspx?tela=destinatario") End Sub 'Clica no botão Login Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click wb.Document.GetElementById("ib_login_senha").InvokeMember("click") End Sub 'Acessa o contribuinte Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Habilita a navegação no controle wb.AllowNavigation = True 'Faz o login wb.Document.GetElementById("usr").SetAttribute("value", USUARIO) wb.Document.GetElementById("snh").SetAttribute("value", SENHA) End Sub 'Clica no botão acessar Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click For Each ele As HtmlElement In wb.Document.All If ele.GetAttribute("src").Contains("avancar") Then ele.InvokeMember("click") End If Next End Sub 'Distroi o controle para ser recriado em seguida
'Aqui é onde eu tento recriar o controle para acessar comoutro usuario e senha Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click wb.Dispose() End Sub 'Botão para criar novamente o controle que foi destruido e acessar outro contribuinte Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click CriarWebBrowser() Me.wb.Navigate("http://nfe.sefaz.ba.gov.br/servicos/nfe/Modulos/Geral/NFENC_login.aspx?tela=destinatario") End Sub End Class
- Editado Geraldo Ribeiro sexta-feira, 28 de março de 2014 20:29
-
Certo, modifiquei o seu código. Veja se funciona:
Dim wb As WebBrowser 'Cria o controle quando o form é aberto Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load CriarWebBrowser() End Sub Sub CriarWebBrowser() wb = New WebBrowser() 'Adiciona no form Me.Controls.Add(wb) 'Propriedades Me.wb.Location = New System.Drawing.Point(12, 12) Me.wb.MinimumSize = New System.Drawing.Size(20, 20) Me.wb.Name = "wb" Me.wb.Size = New System.Drawing.Size(946, 250) Me.wb.TabIndex = 0 wb.Navigate("http://nfe.sefaz.ba.gov.br/servicos/nfe/Modulos/Geral/NFENC_login.aspx?tela=destinatario") End Sub Sub DestroiWebBrowser() Me.Controls.Remove(wb) wb.Dispose() wb = Nothing GC.Collect() GC.WaitForPendingFinalizers() End Sub 'Clica no botão Login Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click wb.Document.GetElementById("ib_login_senha").InvokeMember("click") End Sub 'Acessa o contribuinte Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Habilita a navegação no controle wb.AllowNavigation = True 'Faz o login wb.Document.GetElementById("usr").SetAttribute("value", USUARIO) wb.Document.GetElementById("snh").SetAttribute("value", SENHA) End Sub 'Clica no botão acessar Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click For Each ele As HtmlElement In wb.Document.All If ele.GetAttribute("src").Contains("avancar") Then ele.InvokeMember("click") End If Next End Sub 'Distroi o controle para ser recriado em seguida 'Aqui é onde eu tento recriar o controle para acessar comoutro usuario e senha Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click DestroiWebBrowser() End Sub 'Botão para criar novamente o controle que foi destruido e acessar outro contribuinte Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click CriarWebBrowser() Me.wb.Navigate("http://nfe.sefaz.ba.gov.br/servicos/nfe/Modulos/Geral/NFENC_login.aspx?tela=destinatario") End Sub End Class
Herbert Lausmann
-
Herbert,
Não funcionou.
Quando volto para a parte do login, quando clico no botão ele continua conectado com o mesmo usuário e senha, ou seja, ele não descartou a conexão feita antes.
Parece ser uma coisa simples, mas tá difícil.
Pelo jeito tá difícil simular tal coisa no VB.
Você tem alguma outra dica ???
- Editado Geraldo Ribeiro sábado, 29 de março de 2014 00:57 errei
-
A solução temporária que encontrei foi dar um Application.restart(), porém não acho que seja uma forma elegante de resolver este problema, pois esse restart fecha e abre o aplicativo, não gostaria que fosse assim.
Pensei também em criar um executável à parte que seria responsável por todas as rotinas enquanto estiver logado, então se clicar em desconectar ou fazer logoff ele fecha o form referente a este executável, o que você acha Herbert???
Tem alguma outra saída??
- Editado Geraldo Ribeiro sábado, 29 de março de 2014 01:04
-
Hum, todo site que faz login tem que ter como fazer logoff. A questão é que a opção de logoff pode estar de maneira diferente, como Encerrar, ou Encerrar Sessão.
Até por que eu entrei na página de login desse site, e fica uma mensagem assim:
"Para sua segurança, após usar o serviço, não esqueça de encerrar a sessão."
Então isso quer dizer que tem essa opção de logoff em algum lugar da página...
Herbert Lausmann
-
-
-
-
-
-
Herbert,
Tentei achar alguns exemplos de como usar o método para remover os cookies via Vb.Net, mas não achei um exemplo prático, teria como vc me mostrar como fazer essa limpeza de cookies via vb?
Pode ser de todos os cookies, obrigado...
Código para apagar todos os cookies:
Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache) Dim di As System.IO.DirectoryInfo = New DirectoryInfo(path) For Each file As FileInfo In di.GetFiles() file.Delete() Next For Each dir As DirectoryInfo In di.GetDirectories() dir.Delete(True) Next
Não testei, mas deve funcionar...Herbert Lausmann
-
Pessoal,
Estou reabrindo este tópico pois ainda não consegui resolver meu problema.
Se alguém tiver alguma ideia de como simular um "FECHA e ABRE" Internet explorer no VB. Ou alguma rotina que limpe os dados de navegação, permitindo novo login.
Desde já obrigado.