none
Capturar html de uma página RRS feed

  • Pergunta

  • Oi galera, blz?

    No evento Page.Load de uma página, eu preciso pegar todo o html desta página, buscar uma string e  fazer o replace dela por outra string.

    Tem como fazer isso?

    Tentei pegar o html do meu form desse jeito abaixo. Passei para a função meu form runat=server que chama "form1"

    Public Shared Function RenderControlToString(control As Control) As String
            Using sw As New IO.StringWriter()
                Dim htw As New HtmlTextWriter(sw)
                control.RenderControl(htw)
                htw.Flush()
                return sw.ToString()
            End Using
        End Function

    Até consegui resgatar o html mas dá esse erro na página

    A page can have only one server-side Form tag.

    "Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.Web.HttpException: A page can have only one server-side Form tag."

    Abç,

    Fernando.


    quinta-feira, 23 de junho de 2016 16:09

Respostas

  • Possivelmente você não olhou a referência que eu citei acima, http://www.w3schools.com/.
    Você precisa estudar praticando. Se você tivesse estudado e executado os exemplos que passei, você já teria respondido as próprias perguntas. Eu digo respeitosamente. E ressalto que programação se estuda praticando. Não é só leitura e aproveitamento de código da Web. É uma área muito complexa e envolve uma responsabilidade elevada. A cópia de código não forma um profissional, mas o pleno entendimento dos conceitos com base prática fundada em tentativa e erro.

    1) "Mas o jQuery pega elementos que não sejam html?"
    Pega sim, ele vai pegar com toda certeza o elemento "banner" que você criou usando os três exemplos acima.

    2) O jQuery não entende o "banner" como uma tag. Você precisa utilizar o exemplo no post "Encontrar string com Regex" para coletar os atributos do "banner". Link do post: https://social.msdn.microsoft.com/Forums/pt-BR/38668863-0343-44e1-b3b0-1b68b9caa2a5/encontrar-string-com-regex?forum=aspnetpt#ad5de44c-bb98-48f0-b2fd-86b679bfdfff

    3) Você pode usar o mesmo conceito do post acima, "Encontrar string com Regex", para capturar os banners, mas em Javascript.

    Meu caro, peço por gentileza, que você estudo a referência abaixo, que foi citada numa das repostas acima. Aproveito e referencio outros para você ter base para solucionar essa dificuldade. Sem o entendimento desse todo, você vai ter dificuldade em outros pontos, além deste.

    1. http://www.w3schools.com/js/default.asp
    2. http://www.w3schools.com/jquery/
    3. http://www.w3schools.com/aspnet/default.asp

    Todos são muito didáticos.

    Abs.

    • Sugerido como Resposta Mr. GMSOFT sexta-feira, 24 de junho de 2016 12:55
    • Marcado como Resposta Thales F Quintas sexta-feira, 24 de junho de 2016 17:00
    sexta-feira, 24 de junho de 2016 12:37

Todas as Respostas

  • Fala meu caro,

    Use esse componente: https://htmlagilitypack.codeplex.com/.
    Ele percorre o DOM da página e você pode resgatar tags, propriedades, tudo pelo id, classe, nome da tag mesmo, tags filhos, por tudo o que você já conhece.

    Ex:

    var linksVideosInternos = documento.DocumentNode.SelectNodes("//a[@class='story-title']");

    Para coletar o HTML use a função abaixo - ela tem o mesmo efeito do método file_get_contents do PHP. 
    Obs. No lugar de fileName, coloque a URL.

    public static string coletaConteudo(string fileName)
            {
                string sContents = string.Empty;
                if (fileName.ToLower().IndexOf("http:") > -1)
                { // URL 
                    System.Net.WebClient wc = new System.Net.WebClient();
                    byte[] response = wc.DownloadData(fileName);
                    sContents = System.Text.Encoding.ASCII.GetString(response);
                }
                else
                {
                    // Regular Filename 
                    System.IO.StreamReader sr = new System.IO.StreamReader(fileName);
                    sContents = sr.ReadToEnd();
                    sr.Close();
                }
                return sContents;
            }
        }

    quinta-feira, 23 de junho de 2016 16:21
  • Fala Gilberto, blz?

    Você de novo para me salvar. rsrsrs

    O problema é que o html que quero resgatar é da própria página que estou.

    Acho que o que eu quero não pode ser em .Net. Como vou pegar o html de uma página no Page.Load dela se esse html nem foi renderizado no navegador ainda, correto?

    É isso que eu precisava, pegar o html renderizado, achar aquela string [banner /] que vc me ensinou a pegar num outro post e depois disso fazer o replace dessa string por outra.

    Acho que isso tem que ser com javascript, não é não?

    Abç.

    quinta-feira, 23 de junho de 2016 16:31
  • Fala Fernando, 

    kkkk - Estamos juntos!

    Agora eu entendi.

    O ideal não seria pegar todo o documento, porque vai ser uma string muito grande - vai demorar mais a executar o método. Veja se tem algum elemento em que os "banners" são carregados. Encontrado esse elemento, faça a pesquisa por "id", pela "classe", enfim para carregar uma string menor.

    //Id
    jQuery("#idTag").text();
    
    //Classe
    jQuery(".minhaClasse").text();
    
    //Se tiver que percorrer o documento inteiro - pior solução:
    jQuery("html").text();

    Para saber mais sobre jQuery, dá uma olhada rápida nesse site:
    http://www.w3schools.com/jquery/

    É o mais didático que eu conheço.

    Abs.

    quinta-feira, 23 de junho de 2016 17:15
  • Mas o jQuery pega elementos que não sejam html?

    Essa tag do banner mesmo não é uma html eu que defini o formato [banner /], se eu colocar tipo [banner class="qualquerClasse" /], o jQuery entende isso?

    Nesse caso eu teria que alterar minha tag, tipo <span class="banner" rols="10" cols="10"></span>, o que acha?


    quinta-feira, 23 de junho de 2016 18:10
  • Possivelmente você não olhou a referência que eu citei acima, http://www.w3schools.com/.
    Você precisa estudar praticando. Se você tivesse estudado e executado os exemplos que passei, você já teria respondido as próprias perguntas. Eu digo respeitosamente. E ressalto que programação se estuda praticando. Não é só leitura e aproveitamento de código da Web. É uma área muito complexa e envolve uma responsabilidade elevada. A cópia de código não forma um profissional, mas o pleno entendimento dos conceitos com base prática fundada em tentativa e erro.

    1) "Mas o jQuery pega elementos que não sejam html?"
    Pega sim, ele vai pegar com toda certeza o elemento "banner" que você criou usando os três exemplos acima.

    2) O jQuery não entende o "banner" como uma tag. Você precisa utilizar o exemplo no post "Encontrar string com Regex" para coletar os atributos do "banner". Link do post: https://social.msdn.microsoft.com/Forums/pt-BR/38668863-0343-44e1-b3b0-1b68b9caa2a5/encontrar-string-com-regex?forum=aspnetpt#ad5de44c-bb98-48f0-b2fd-86b679bfdfff

    3) Você pode usar o mesmo conceito do post acima, "Encontrar string com Regex", para capturar os banners, mas em Javascript.

    Meu caro, peço por gentileza, que você estudo a referência abaixo, que foi citada numa das repostas acima. Aproveito e referencio outros para você ter base para solucionar essa dificuldade. Sem o entendimento desse todo, você vai ter dificuldade em outros pontos, além deste.

    1. http://www.w3schools.com/js/default.asp
    2. http://www.w3schools.com/jquery/
    3. http://www.w3schools.com/aspnet/default.asp

    Todos são muito didáticos.

    Abs.

    • Sugerido como Resposta Mr. GMSOFT sexta-feira, 24 de junho de 2016 12:55
    • Marcado como Resposta Thales F Quintas sexta-feira, 24 de junho de 2016 17:00
    sexta-feira, 24 de junho de 2016 12:37