Usuário com melhor resposta
Tratando o HTML no VB.NET

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
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.
- Editado Cliffinho domingo, 21 de maio de 2017 16:32
- Sugerido como Resposta João Paulo [] terça-feira, 23 de maio de 2017 02:40
- Marcado como Resposta Guilherme Macedo SModerator quinta-feira, 25 de maio de 2017 17:39
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)
-
-
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.
- Editado Cliffinho domingo, 21 de maio de 2017 16:32
- Sugerido como Resposta João Paulo [] terça-feira, 23 de maio de 2017 02:40
- Marcado como Resposta Guilherme Macedo SModerator quinta-feira, 25 de maio de 2017 17:39
-
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.