none
RESTARTAR O WEBBROWSER VB.NET RRS feed

  • 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á.

    sexta-feira, 28 de março de 2014 20:05

Todas as Respostas

  • Talvez mesmo chamando o Dispose não retire ele totalmente da memória...

    Como está o seu código?


    Herbert Lausmann

    sexta-feira, 28 de março de 2014 20:17
  • 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




    sexta-feira, 28 de março de 2014 20:28
  • 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

    sexta-feira, 28 de março de 2014 20:43
  • 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 ???


    sábado, 29 de março de 2014 00:56
  • 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??


    sábado, 29 de março de 2014 01:03
  • 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

    sábado, 29 de março de 2014 10:30
  • Herbert, desculpe não poder te enviar a senha, sei que você poderia me ajudar melhor se pudesse acessar. Olha aí a tela como fica após o login no site....

    Estranho não ter a opção de logoff...

    sábado, 29 de março de 2014 23:35
  • Mesmo assim acredito que deva existir alguma forma de se fazer o logoff simulando a saída do browser......vou continuar pesquisando...

    Se alguém poder contribuir com alguma dica, desde já muito obrigado.

    sábado, 29 de março de 2014 23:39
  • Eu tava pensando: Talvez quando você faz login é criado um cookie na pasta C:\Users\NomeDoUsuário\AppData\Local\Microsoft\Windows\Temporary Internet Files.

    Se você conseguisse localizar (se é que existe) e excluir o cookie referente ao login da sefaz resolveria o problema.


    Herbert Lausmann

    domingo, 30 de março de 2014 10:27
  • Bem lembrado Herbert,

    Vou remover os cookies quando chegar em casa, talvez o cookie específico da Sefaz e posto aqui o resultado....

    Mais uma vez obrigado...

    segunda-feira, 31 de março de 2014 11:26
  • 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...

    quarta-feira, 2 de abril de 2014 18:52
  • 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

    quarta-feira, 2 de abril de 2014 21:22
  • 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.

    quinta-feira, 11 de dezembro de 2014 19:08