none
Simular um clique em uma pagina web RRS feed

  • Pergunta

  • Boa noite a todos.

    Eu criei um projeto que faz a leitura dos andamentos de um processo no site do TJSP, mas estou com uma problema, na pagina que estou carregando, aparece somente as últimos 5 andamentos e eu preciso de todos.

    Exemplo

    http://esaj.tjsp.jus.br/cpo/pg/search.do?conversationId=&paginaConsulta=1&localPesquisa.cdLocal=-1&cbPesquisa=NUMPROC&tipoNuProcesso=UNIFICADO&numeroDigitoAnoUnificado=1021884-84.201&foroNumeroUnificado=0053&dePesquisaNuUnificado=1021884-84.2015.8.26.0053&dePesquisaNuAntigo=

    Nessa pagina, tem uma ABA chamada Movimentações, e nela aparece somente os 5 últimos andamentos, porem quando clicar no link "Listar todas as movimentações", aparece todas as movimentações, eu preciso simular esse clique antes de ler o html da pagina no sistema, porque assim consigo ler todos as movimentações do processo.

    Aqui esta o código onde faço a leitura no meu programa.

           
     Dim wc As New WebClient
            Dim html As String = wc.DownloadString(url)
            Dim links As MatchCollection = Regex.Matches(html, "<td width=""120"" style=""vertical-align: top"">(.*?)</td>(.*?)<td style=""vertical-align: top; padding-bottom:
     5px"" >(.*?)<br/>(.*?)<span style=""font-style: italic;"">(.*?)</span>", RegexOptions.Singleline)
            For Each match As Match In links
                Dim data As String = match.Groups(1).Value.Replace(vbCrLf, Nothing).Replace(" ", Nothing)
    
                Dim DataSistema As System.Object = "0000-00-00"
                If Not data = "  /  /" Then
                    DataSistema = Format(CType(data, Date), "yyyy-MM-dd")
                End If
    
    Dim texto As String = vbTab & match.Groups(3).Value.Replace(vbTab, Nothing).Replace(vbCrLf, Nothing).Replace("  ", "").Replace("&aacute;", "á").Replace("&uacute;", "ú").Replace("&ccedil;", "ç").Replace("&atilde;", "ã").Replace("<a class=""linkMovVincProc"" title=""Visualizar documento em inteiro teor"" href=""#"" name=""M""", "").Replace("cdDocumento", "Documento").Replace(""">", " ").Replace("</a>", "").Replace("&agrave;", "à") & vbTab & match.Groups(5).Value.Replace("&aacute;", "á").Replace("&uacute;", "ú").Replace("&ccedil;", "ç").Replace("&atilde;", "ã").Replace("&agrave;", "à")  
    
              texto = texto.Replace("'", "")   
             
    
    objAndamentoIndividualBLL.SelecionarAndamento(DataSistema, texto, txtProcesso.Text, txtRf.Text, lblAcaoIndividual.Text)          
    
      If (objAndamentoIndividualBLL.Verdadeiro = False) Then                
    
    objAndamentoIndividualBLL.IncluirAndamentoProcesso(txtRf.Text, lblAcaoIndividual.Text, txtProcesso.Text, texto, texto, DataSistema, "00:00", "", "SISTEMA") 
               
    End If  
          
    Next
    



    • Editado Pandox quarta-feira, 19 de agosto de 2015 01:23
    quarta-feira, 19 de agosto de 2015 01:23

Respostas

  • Como eu disse, a table está lá oculta e se olhar o código fonte da página mesmo sem clicar para exibir todos, no html você consegue ver todos os processos.

    Te aconselho nesse caso não usar expressão regular em todo o texto e sim pegar o elemento pelo Id dele e lá dentro você faz a expressão ou foreach pelos elementos filhos.

    Usando o componente Webbrowser pode fazer assim:

      Private web As New WebBrowser
    

    No load do formulário ou onde preferir adicione o evento de documento completo

        AddHandler web.DocumentCompleted, AddressOf DocumentoCompleto
    

    Método executado no evento para leitura do html após a conclusão do documento.

      Private Sub DocumentoCompleto(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
        Dim elemento As HtmlElement = web.Document.GetElementById("tabelaTodasMovimentacoes")
        Dim elementos As HtmlElementCollection = elemento.GetElementsByTagName("tr")
        For Each item As HtmlElement In elementos
          MessageBox.Show(item.OuterText) ' Somente exemplo para pegar todo o texto
        Next
      End Sub

    E para carregar a página

        web.Navigate("http://esaj.tjsp.jus.br/cpo/pg/search.do?conversationId=&paginaConsulta=1&localPesquisa.cdLocal=-1&cbPesquisa=NUMPROC&tipoNuProcesso=UNIFICADO&numeroDigitoAnoUnificado=1021884-84.201&foroNumeroUnificado=0053&dePesquisaNuUnificado=1021884-84.2015.8.26.0053&dePesquisaNuAntigo=")
    
    Nesse exemplo ele lê tudo o que você precisa, ai é só manipular da forma que precisa.


    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    • Sugerido como Resposta Marques Junior quarta-feira, 19 de agosto de 2015 19:49
    • Marcado como Resposta Marcos SJ quinta-feira, 20 de agosto de 2015 15:16
    quarta-feira, 19 de agosto de 2015 17:00

Todas as Respostas

  • Usando a classe webbrowser poderia tentar assim:

    WebBrowser1.Document.GetElementById("linkmovimentacoes").InvokeMember("click") 

    ou

    For Each ele As HtmlElement In Webbrowser1.document.Links
      If ele.GetAttribute("href") = "o endereço do link aqui" Then
        ele.InvokeMember("click")
      End If
    Next
    
    


    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    quarta-feira, 19 de agosto de 2015 04:20
  • Dei uma olhada no link e tem duas tabelas, uma que mostra só as 5 e uma que fica oculta que mostra todos com o id tabelaTodasMovimentacoes, nesse caso bastaria você pegar todo o conteúdo somente da tabela tabelaTodasMovimentacoes que está oculta mas se você ver o código da página ela está lá com todos os dados.

    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    quarta-feira, 19 de agosto de 2015 04:24
  • Com esse código que coloquei, teoricamente deveria pegar as publicações ocultas, mas não esta pegando

    Dim links As MatchCollection = Regex.Matches(html, "<td width=""120"" style=""vertical-align: top"">(.*?)</td>(.*?)<td style=""vertical-align: top; padding-bottom: 5px"" >(.*?)<br/>(.*?)<span style=""font-style: italic;"">(.*?)</span>", RegexOptions.Singleline)

    quarta-feira, 19 de agosto de 2015 13:18
  • Como o Bruno comentou o código fica oculto até ser solicitado que seja exibido. Quando o wc.DownloadString(url) do seu código faz o download do fonte da página só está lá os 5 primeiros itens, por isso a regex não cata todos os itens pois os itens restantes  só ficam disponível quando clica em exibir.

    Tem um pluing do firefox, LiveHTTPHeaders, que capta o header da página e acredito que você possa ver o link completo para exibir todas as movimentações:

    http://livehttpheaders.mozdev.org/


    quarta-feira, 19 de agosto de 2015 14:56
  • Como eu disse, a table está lá oculta e se olhar o código fonte da página mesmo sem clicar para exibir todos, no html você consegue ver todos os processos.

    Te aconselho nesse caso não usar expressão regular em todo o texto e sim pegar o elemento pelo Id dele e lá dentro você faz a expressão ou foreach pelos elementos filhos.

    Usando o componente Webbrowser pode fazer assim:

      Private web As New WebBrowser
    

    No load do formulário ou onde preferir adicione o evento de documento completo

        AddHandler web.DocumentCompleted, AddressOf DocumentoCompleto
    

    Método executado no evento para leitura do html após a conclusão do documento.

      Private Sub DocumentoCompleto(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
        Dim elemento As HtmlElement = web.Document.GetElementById("tabelaTodasMovimentacoes")
        Dim elementos As HtmlElementCollection = elemento.GetElementsByTagName("tr")
        For Each item As HtmlElement In elementos
          MessageBox.Show(item.OuterText) ' Somente exemplo para pegar todo o texto
        Next
      End Sub

    E para carregar a página

        web.Navigate("http://esaj.tjsp.jus.br/cpo/pg/search.do?conversationId=&paginaConsulta=1&localPesquisa.cdLocal=-1&cbPesquisa=NUMPROC&tipoNuProcesso=UNIFICADO&numeroDigitoAnoUnificado=1021884-84.201&foroNumeroUnificado=0053&dePesquisaNuUnificado=1021884-84.2015.8.26.0053&dePesquisaNuAntigo=")
    
    Nesse exemplo ele lê tudo o que você precisa, ai é só manipular da forma que precisa.


    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    • Sugerido como Resposta Marques Junior quarta-feira, 19 de agosto de 2015 19:49
    • Marcado como Resposta Marcos SJ quinta-feira, 20 de agosto de 2015 15:16
    quarta-feira, 19 de agosto de 2015 17:00
  • Muito Obrigado pela resposta, me ajudou muito.
    terça-feira, 25 de agosto de 2015 03:12