none
Tratando o HTML no VB.NET RRS feed

  • Pergunta

  • Olá, estou com um problema que está me deixando louco. Fiz um código simples que pega o Html da pagina através de um ID.. Beleza, até ai tudo bem, O meu problema é que não estou conseguindo fazer com que esse codigo dê uma mensagem de erro caso o ID da página não seja encontrado, por que vai ter paginas que não vai ter o mesmo ID.  

    OBS: Se eu executar o codigo em outra pagina (do mesmo site) o programa da erro. HELP

    Dim request As String = WebBrowser1.Document.GetElementById("id da pagina").InnerHtml
    
            TextBox1.Text = request

    sábado, 20 de maio de 2017 08:58

Respostas

  • A classe HtmlDocument (que é o que é retornado pelo WebBrowser.Document), tem uma propriedade chamada All, que é um HtmlElementCollection, como TODOS os elementos da página. Cada elemento dessa coleção é um HtmlElement. Pois bem, o que você pode fazer é um loop percorrendo essa coleção, e verificar se cada HtmlElement tem o id que você está precisando. Lembre-se, a classe HtmlElement tem uma propriedade chamada Id, que retorna uma string como o id do elemento.

    Novamente, vou tentar te mostrar um exemplo (Lembre-se que não sou muito bom no VB ;D)

    Dim docElements As HtmlElementCollection = WebBrowser1.Document.All
    
    For Each element As HtmlElement in DocElements
        If element.Id == "meu_id" Then
            TextBox1.Text = "Item com id: " & element.Id & " tem conteúdo: " & element.InnerHtml
        End If
    Next

    Outra opção é usar a propriedade HtmlElementCollection.Item, que você passa uma string como o nome do tag ou id. Ele retorna null se nenhum elemento/tag com o nome ou id especificado for encontrado no documento.

    Dim element As HtmlElement = WebBrowser1.Document.All.Item("meu_id ou minha_tag")
    
    If element == Null Then
        TextBox1.Text = "Elemento não encontrado"
    End If

    Algumas outras Classes e Propriedades que podem ser úteis no seu caso:

    Classe HtmlDocument (Retornado por WebBrowser.Document),

    Propriedade HtmlDocument.All (Retorna todos os elementos de um HtmlDocument)

    Classe HtmlElementCollection (Retornado por HtmlDocument.All [Uma coleção de HtmlElement])

    Classe HtmlElement (Tem todas as propriedades de um elemento/tag html)

    Propriedade HtmlCollection.Item(String) (Retorna o elemento com a string do Nome da tag ou seu id)

    Veja se consegue agora.


    domingo, 21 de maio de 2017 16:30

Todas as Respostas

  • Por que você não tenta armazenar o elemento em uma variável e checar se ele é nulo?

    Pode ser que não funcione, a final, a Documentação do .NET diz que o método GetElementById() retorna null se a página não estiver carregada...

    Mas tente isso

    Dim element As HtmlElement = WebBrowser1.Document.GetElementById("seu_id");
    
    If element Equals null Then
        MessageBox.Show("Nenhum elemento encontrado")
    End If
    (Desculpa se tiver algum erro no código, não mecho com VB há 3 anos :D)

    sábado, 20 de maio de 2017 19:59
  •  Não deu muito certo, preciso que o ID que estou puxando do webbrowser vá para o Textbox :/ como poderia fazer isso?
    domingo, 21 de maio de 2017 07:47
  • A classe HtmlDocument (que é o que é retornado pelo WebBrowser.Document), tem uma propriedade chamada All, que é um HtmlElementCollection, como TODOS os elementos da página. Cada elemento dessa coleção é um HtmlElement. Pois bem, o que você pode fazer é um loop percorrendo essa coleção, e verificar se cada HtmlElement tem o id que você está precisando. Lembre-se, a classe HtmlElement tem uma propriedade chamada Id, que retorna uma string como o id do elemento.

    Novamente, vou tentar te mostrar um exemplo (Lembre-se que não sou muito bom no VB ;D)

    Dim docElements As HtmlElementCollection = WebBrowser1.Document.All
    
    For Each element As HtmlElement in DocElements
        If element.Id == "meu_id" Then
            TextBox1.Text = "Item com id: " & element.Id & " tem conteúdo: " & element.InnerHtml
        End If
    Next

    Outra opção é usar a propriedade HtmlElementCollection.Item, que você passa uma string como o nome do tag ou id. Ele retorna null se nenhum elemento/tag com o nome ou id especificado for encontrado no documento.

    Dim element As HtmlElement = WebBrowser1.Document.All.Item("meu_id ou minha_tag")
    
    If element == Null Then
        TextBox1.Text = "Elemento não encontrado"
    End If

    Algumas outras Classes e Propriedades que podem ser úteis no seu caso:

    Classe HtmlDocument (Retornado por WebBrowser.Document),

    Propriedade HtmlDocument.All (Retorna todos os elementos de um HtmlDocument)

    Classe HtmlElementCollection (Retornado por HtmlDocument.All [Uma coleção de HtmlElement])

    Classe HtmlElement (Tem todas as propriedades de um elemento/tag html)

    Propriedade HtmlCollection.Item(String) (Retorna o elemento com a string do Nome da tag ou seu id)

    Veja se consegue agora.


    domingo, 21 de maio de 2017 16:30
  • Bom dia,

    Por falta de retorno esta thread esta encerrada !

    Por gentileza, caso necessário abra uma nova thread.

    Atenciosamente,


    Guilherme Macedo S

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

    TechNet 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.

    quinta-feira, 25 de maio de 2017 17:39
    Moderador