PEGAR TEXTO DE LINK COM WEBBROWSER
Pessoal estou tentando pegar o texto de um link com o WebBrowser mas só pego a parte de cima,
queria pegar o conteúdo, alguém pode ajudar?
Ele pega o [Ô]1.0[Ô] quando na verdade queria pegar o
corpo do link que é [Ô]5.0[Ô].
Este é o link do projeto:
Download
queria pegar o conteúdo, alguém pode ajudar?
Private Sub Form_Load()
WB.Navigate [Ô]https://www.dropbox.com/s/s3n4dm9nhqjn5pr/Vers%C3%A3o%201.0.txt?dl=0[Ô]
End Sub
Private Sub Command1_Click()
Dim Texto As String
Texto = WB.Document.body.innerText
txtVersao = Mid(Texto, InStr(1, Texto, [Ô]Versão [Ô]) + 7, 3)
End Sub
Ele pega o [Ô]1.0[Ô] quando na verdade queria pegar o
corpo do link que é [Ô]5.0[Ô].
Este é o link do projeto:
Download
Opa Jorge, beleza?
Tenho visto seus posts aqui cara. De certa forma me servem pra tomar vergonha na cara, sempre acho que estou velho pra fazer algo e acabo desanimando. Inclusive tem uma pergunta minha que fiz hoje sobre isso.
Enfim, vai ser uma honra finalmente poder dar minha contribuição ao seu aprendizado, ou tentar haha
O lance aÃ, é se você olhar o código fonte da página, você não encontrará o conteúdo [Ô]Versão 5.0[Ô]. Simplesmente porque ele está numa frame. Eu comecei a criar o código aqui, mas deu acesso negado. Direto dando acesso negado... E eu não tava entendendo o motivo. Dei uma pesquisada e vi que isso geralmente acontece quando o conteúdo da frame está num domÃnio diferente. Caso tenha curiosidade para ver:
webBrowser1.Document.Window.Frames([Ô]htmlified[Ô]).document.body.innertext
Esse [Ô]htmlified[Ô] é justamente o ID do frame no site. Basta procurar por [Ô]iframe[Ô] no código fonte que você verá.
AÃ tive uma ideia.
No html você vai encontrar algo como:
<iframe src=[Ô]https://dl.dropboxusercontent.com/content_link_htmlify/AhCXhxUbll3KiwvFfhZ9nqeIevwFMo1EyZU1zuRIXbyta1DwGfvXbUMWzRvIWmH0[Ô] id=[Ô]htmlified[Ô] frameborder=[Ô]0[Ô]></iframe>
Só que esse endereço que aparece aà no src não é estático.
Qual é a idéia?
Ler todo o conteúdo do texto e pesquisar usando Instr a expressão [Ô]<iframe src=[Ô] que é única no documento. Quando você achar esse endereço, você usa o Webbrowser pra carregar ele e finalmente usar o seu código já feito pra pegar a tal Versão. Entendeu?
Eu até faria o código, mas to sem o VB6 na máquina. Aliás, saudades do VB6, minha primeira linguagem. (Fiz os testes usando .NET)
Espero ter ajudado.
Talvez algum amigo te aconselhe como lidar de outra forma com o Access denied. Eu sei que existem algumas bibliotecas prontas que tratam isso, mas para .NET.
Enfim, abraços!
Tenho visto seus posts aqui cara. De certa forma me servem pra tomar vergonha na cara, sempre acho que estou velho pra fazer algo e acabo desanimando. Inclusive tem uma pergunta minha que fiz hoje sobre isso.
Enfim, vai ser uma honra finalmente poder dar minha contribuição ao seu aprendizado, ou tentar haha
O lance aÃ, é se você olhar o código fonte da página, você não encontrará o conteúdo [Ô]Versão 5.0[Ô]. Simplesmente porque ele está numa frame. Eu comecei a criar o código aqui, mas deu acesso negado. Direto dando acesso negado... E eu não tava entendendo o motivo. Dei uma pesquisada e vi que isso geralmente acontece quando o conteúdo da frame está num domÃnio diferente. Caso tenha curiosidade para ver:
webBrowser1.Document.Window.Frames([Ô]htmlified[Ô]).document.body.innertext
Esse [Ô]htmlified[Ô] é justamente o ID do frame no site. Basta procurar por [Ô]iframe[Ô] no código fonte que você verá.
AÃ tive uma ideia.
No html você vai encontrar algo como:
<iframe src=[Ô]https://dl.dropboxusercontent.com/content_link_htmlify/AhCXhxUbll3KiwvFfhZ9nqeIevwFMo1EyZU1zuRIXbyta1DwGfvXbUMWzRvIWmH0[Ô] id=[Ô]htmlified[Ô] frameborder=[Ô]0[Ô]></iframe>
Só que esse endereço que aparece aà no src não é estático.
Qual é a idéia?
Ler todo o conteúdo do texto e pesquisar usando Instr a expressão [Ô]<iframe src=[Ô] que é única no documento. Quando você achar esse endereço, você usa o Webbrowser pra carregar ele e finalmente usar o seu código já feito pra pegar a tal Versão. Entendeu?
Eu até faria o código, mas to sem o VB6 na máquina. Aliás, saudades do VB6, minha primeira linguagem. (Fiz os testes usando .NET)
Espero ter ajudado.
Talvez algum amigo te aconselhe como lidar de outra forma com o Access denied. Eu sei que existem algumas bibliotecas prontas que tratam isso, mas para .NET.
Enfim, abraços!
Deu esse erro:
Deve ser porque o VB6 não tem suporte à esse método. Isso eu testei no .NET. Me desculpe.
Mas seja como for, segue a dica que falei embaixo.
Leia o texto com:
Dim Texto As String
Texto = WB.Document.body.innerText
Só que na hora de procurar com Instr, você procura por [Ô]<iframe src=[Ô] e pega o endereço que está a frente dessa tag.
AÃ você abre ela no webbrowser com Navigate.
Aà basta você ler novamente com WB.Document.body.innerText procurando por [Ô]Versão[Ô].
Abraços!
Mas seja como for, segue a dica que falei embaixo.
Leia o texto com:
Dim Texto As String
Texto = WB.Document.body.innerText
Só que na hora de procurar com Instr, você procura por [Ô]<iframe src=[Ô] e pega o endereço que está a frente dessa tag.
AÃ você abre ela no webbrowser com Navigate.
Aà basta você ler novamente com WB.Document.body.innerText procurando por [Ô]Versão[Ô].
Abraços!
Não funcionou, deu o mesmo erro
Pode mostrar seu código?
Dim texto As String
texto = WB.Document.body.Frame
txtVersao = Mid(texto, InStr(1, texto, [Ô]Versão [Ô]) + 7, 3)
Ué, mas aà você voltou para o que a gente tinha falado.
Vou fazer alguma coisa aqui, mas como to sem o VB6, deve ter alguns errinhos básicos hahaha Mas pelo menos você entende a idéia.
No load vai ficar a mesma coisa. Vai carregar a página no seu Webbrowser.
Agora no botão muda. Você não vai procurar por [Ô]Versão[Ô] e sim por [Ô]<iframe src=[Ô] . Vai pegar a url que está na frente dela e carregar no seu WebBrowser.
Agora coloque mais um botão aà e insira o código:
Dim texto As String
texto = WB.Document.body.InnerText
txtVersao = Mid(texto, InStr(1, texto, [Ô]Versão [Ô]) + 7, 3)
A ideia é essa.
Abraços!
Vou fazer alguma coisa aqui, mas como to sem o VB6, deve ter alguns errinhos básicos hahaha Mas pelo menos você entende a idéia.
Private Sub Form_Load()
WB.Navigate [Ô]https://www.dropbox.com/s/s3n4dm9nhqjn5pr/Vers%C3%A3o%201.0.txt?dl=0[Ô]
End Sub
No load vai ficar a mesma coisa. Vai carregar a página no seu Webbrowser.
Private Sub Command1_Click()
Dim texto as String
Dim url as String
Dim inicio as Integer
Dim fim as Integer
texto = WB.Document.body.innerText
inicio = Instr(texto, [Ô]<iframe src=[Ô]) + 14 [ô][ô] Procura no texto pela expressão [Ô]<iframe src=[Ô] Esse 14 representa o Len([Ô]<iframe src=[Ô]) + 2 para iniciar posteriormente as aspas duplas
fim = Instr(inicio, texto, [Ô][Ô][Ô]) - 1 [ô][ô] Procura iniciando pelo Ãndice [Ô]inicio[Ô] na variavel [Ô]texto[Ô] as aspas (que vai indicar o fim da url do site)
url = Mid(texto, inicio, fim)
WB.Navigate url
End Sub
Agora no botão muda. Você não vai procurar por [Ô]Versão[Ô] e sim por [Ô]<iframe src=[Ô] . Vai pegar a url que está na frente dela e carregar no seu WebBrowser.
Agora coloque mais um botão aà e insira o código:
Dim texto As String
texto = WB.Document.body.InnerText
txtVersao = Mid(texto, InStr(1, texto, [Ô]Versão [Ô]) + 7, 3)
A ideia é essa.
Abraços!
Ao executar esse código:
O WebBrowser vai para a pagina da imagem
Ao menos não dá erro, é sinal de progresso (eu espero)
Private Sub Command2_Click()
Dim texto As String
Dim url As String
Dim inicio As Integer
Dim fim As Integer
texto = WB.Document.body.innerText
inicio = InStr(texto, [Ô]<iframe src=[Ô]) + 14
fim = InStr(inicio, texto, [Ô][Ô]) - 1
url = Mid(texto, inicio, fim)
WB.Navigate url
End Sub
O WebBrowser vai para a pagina da imagem
Ao menos não dá erro, é sinal de progresso (eu espero)
Fiz aqui no VB.NET. Como pensei, tinha alguns erros hahaha
Por algum motivo, o WebBrowser não está pegando o código-fonte na Ãntegra. Ou seja, o conteúdo que o WebBrowser retorna, é diferente do conteúdo que aparece na janela de código fonte do meu Google Chrome. Tentei todos os métodos do WebBrowser, inclusive alguns que só tem no .NET, e nada de funcionar. O jeito foi usar o namespace System.Net que no seu caso, não te ajuda em nada.
Meu código ficou assim:
E está funcionando.
Agora vou esperar algum colega do VbMania ajudar hahaha
Porque realmente não sei o motivo do WebBrowser não está retornando a parte que eu quero quando eu uso Wb.Document.Body.OuterHtml ou InnerHtml...
Essa é a parte que precisa ser convertida do .Net para VB6 (Essa linha retorna o código da página como aparece na janela de código fonte do browser). Acredito que tenha algum método no WebBrowser que retorne tudo, mas eu não achei.
Sei que tem como conseguir o html da página pelo Winsock mandando um Post também, mas acredito que deve ter um método mais fácil.
Enfim, espero que alguém um pouco mais competente te ajude agora hahaha
Abraços!
Obs: O código que te passei retornou exatamente o 5.0... Sinal que pelo menos a ideia está correta.
Por algum motivo, o WebBrowser não está pegando o código-fonte na Ãntegra. Ou seja, o conteúdo que o WebBrowser retorna, é diferente do conteúdo que aparece na janela de código fonte do meu Google Chrome. Tentei todos os métodos do WebBrowser, inclusive alguns que só tem no .NET, e nada de funcionar. O jeito foi usar o namespace System.Net que no seu caso, não te ajuda em nada.
Meu código ficou assim:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
WebBrowser1.Navigate([Ô]https://www.dropbox.com/s/s3n4dm9nhqjn5pr/Vers%C3%A3o%201.0.txt?dl=0[Ô])
End Sub
Private Sub AbreURLToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AbreURLToolStripMenuItem.Click
Dim texto As String
Dim url As String
Dim inicio As Integer
Dim fim As Integer
texto = (New System.Net.WebClient()).DownloadString([Ô]https://www.dropbox.com/s/s3n4dm9nhqjn5pr/Vers%C3%A3o%201.0.txt?dl=0[Ô])
inicio = InStr(texto, [Ô]<iframe src=[Ô]) + 13
fim = InStr(inicio, texto, [Ô] [Ô]) - 1
url = Mid(texto, inicio, fim - inicio)
WebBrowser1.Navigate(url)
End Sub
Private Sub PegaVersaoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PegaVersaoToolStripMenuItem.Click
Dim texto As String
Dim versao As String
texto = WebBrowser1.Document.Body.InnerText
versao = Mid(texto, InStr(1, texto, [Ô]Versão [Ô]) + 7, 3)
MsgBox(versao)
End Sub
E está funcionando.
Agora vou esperar algum colega do VbMania ajudar hahaha
Porque realmente não sei o motivo do WebBrowser não está retornando a parte que eu quero quando eu uso Wb.Document.Body.OuterHtml ou InnerHtml...
texto = (New System.Net.WebClient()).DownloadString([Ô]https://www.dropbox.com/s/s3n4dm9nhqjn5pr/Vers%C3%A3o%201.0.txt?dl=0[Ô])
Essa é a parte que precisa ser convertida do .Net para VB6 (Essa linha retorna o código da página como aparece na janela de código fonte do browser). Acredito que tenha algum método no WebBrowser que retorne tudo, mas eu não achei.
Sei que tem como conseguir o html da página pelo Winsock mandando um Post também, mas acredito que deve ter um método mais fácil.
Enfim, espero que alguém um pouco mais competente te ajude agora hahaha
Abraços!
Obs: O código que te passei retornou exatamente o 5.0... Sinal que pelo menos a ideia está correta.
Vamos aguardar então, muito obrigado por sua ajuda,
vou dar mais uma pesquisada qui, inclusive encontrei
isso:
Private Function WebPageContains(ByVal s As String) As Boolean
Dim i As Integer, ehtml
On Error GoTo Erro
For i = 1 To WB.Document.All.length
Set ehtml = WB.Document.All.Item(i)
If Not (ehtml Is Nothing) Then
If InStr(1, ehtml.innerhtml, s, vbTextCompare) > 0 Then
WebPageContains = True
Exit Function
End If
End If
Next i
Exit Function
Erro:
MsgBox Err.Description & [Ô] [Ô] & Err.Number, vbCritical
End Function
que pode ser usado para encontrar alguma coisa
combinado com este código aqui:
Private Sub Command1_Click()
Dim strfindword As String
strfindword = InputBox([Ô]busca[Ô])
[ô]strfindword = [Ô]Versão 5.0[Ô] [ô]<------------------no meu caso tentei com este mas não funcionou
If WebPageContains(strfindword) = True Then
txtVersao = strfindword
End If
End Sub
Tópico encerrado , respostas não são mais permitidas