none
Logando e baixando planilhas em site via c# RRS feed

  • Pergunta

  • Ola boa tarde a todos!

    Estou desenvolvendo uma aplicação Windows Forms em c# e estou tendo 2 problemas: Necessito logar no seguinte site: https://login.ccee.org.br/. Para realizar essa tarefa estou utilizando o WebBrowser, contudo estou utilizando um botão que ira preencher os campos usuário e senha e fara o submit na pagina. Contudo o documento HTML que se encontra no WebBrowser não e atualizado, ou seja ele permanece com a pagina inicial e não pega a nova pagina mesmo eu mandando ele fazer isso. Abaixo mostro um trecho do código onde realizo essa tarefa. Inicialmente tentei utilizar o webBrowserReadyState.Complete. Mas pegou o HTML inicial da pagina.


    private void Login_Click(object sender, EventArgs e)
            {
                HtmlElementCollection paginaToda = webBrowser1.Document.All;
                HtmlElement teste = webBrowser1.Document.GetElementById("password");
                HtmlElementCollection pagina = webBrowser1.Document.GetElementsByTagName("input");
                HtmlElement usuario = pagina[0];
                HtmlElement senha = pagina[1];
    
                if (usuario != null)
                {
                    usuario.SetAttribute("value", "XXXXXXXX");
                }
                if (senha != null)
                {
                    senha.SetAttribute("value", "XXXXXXXXX");
                }
                HtmlElementCollection paginaLogin = webBrowser1.Document.GetElementsByTagName("button");
                paginaLogin[0].InvokeMember("click");
    
                while(webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                {
                    Application.DoEvents();
                }
    
                autenticar();
            }
            void autenticar()
            {
                HtmlElementCollection paginaToda = webBrowser1.Document.All;
                HtmlElementCollection pagina = webBrowser1.Document.GetElementsByTagName("input");
                HtmlElement viaEmail = pagina[1];
    
                if (viaEmail != null)
                {
                    pagina[1].InvokeMember("click");
                }
            }

    Para tentar resolver este problema de outra forma, tentei utilizar o evento DocumentCompleted, que executaria a tarefa e pegar o novo HTML da pagina e realizar as novas tarefas, contudo o evento executa mas pega o mesmo HTML inicial da pagina. Abaixo mostro o trecho utilizando o evento DocumentCompleted.

            private void Login_Click(object sender, EventArgs e)
            {
                HtmlElementCollection paginaToda = webBrowser1.Document.All;
                HtmlElement teste = webBrowser1.Document.GetElementById("password");
                HtmlElementCollection pagina = webBrowser1.Document.GetElementsByTagName("input");
                HtmlElement usuario = pagina[0];
                HtmlElement senha = pagina[1];
    
                if (usuario != null)
                {
                    usuario.SetAttribute("value", "XXXXXXXXXX");
                }
                if (senha != null)
                {
                    senha.SetAttribute("value", "XXXXXXXXXX");
                }
                HtmlElementCollection paginaLogin = webBrowser1.Document.GetElementsByTagName("button");
                paginaLogin[0].InvokeMember("click");
    
                webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(autenticar);
            }
            void autenticar(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                HtmlElementCollection paginaToda = webBrowser1.Document.All;
                HtmlElementCollection pagina = webBrowser1.Document.GetElementsByTagName("input");
                HtmlElement viaEmail = pagina[1];
    
                if (viaEmail != null)
                {
                    pagina[1].InvokeMember("click");
                }
            }

    O outro problema que esta acontecendo e o seguinte ao executar o login uma mensagem de erro de script aparece. Vou escreve-la aqui ja que o forum nao permitiu que eu cola-se o um print do erro.

    Erro no script desta pagina.

    linha: 114

    caractere 13

    Erro: '$' não está definido

    Código 0

    URL: https://challenge.ccee.org.br/otp/coleta?request_id=7322592136253990772&CREDENTIAL_CONTEXT_DATA=USER_ACTION_COMMAND%

    Deseja continuar executando scripts nesta pagina?

    (opções SIM e NÃO em botoes)

    Caso o botão NÃO se já pressionado a aplicação trava. Caso o botão SIM seja pressionado ela funciona. O que gera esse erro? Como posso resolver isso? Pesquisei em muitos lugares e todos sugerem utilizar o comando, 

    webBrowser.ScriptErrorsSuppressed = true;

    O erro para de aparecer, mas a aplicação trava.

    Desde já agradeço qualquer ajuda. Muito obrigado pela atenção!

    segunda-feira, 24 de julho de 2017 16:42

Todas as Respostas

  • Bom dia, andrew duchini. tudo bem?

    Quando você usa o webBrowser.ScriptErrorsSuppressed = true;

    A aplicação trava de que maneira? poderia dar exemplos?

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 26 de julho de 2017 12:55
    Moderador
  • Trava do tipo para de executar o que estava fazendo. E como se ela depende-se da resposta SIM para continuar executando as tarefas, como o erro foi desabilitado, ele ficar aguardando uma resposta do erro que nunca ira receber
    quarta-feira, 26 de julho de 2017 17:34