PEGAR TEXTO DE LINK COM WEBBROWSER

JORGESALES 16/08/2015 01:43:13
#450066
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?
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
DS2T 16/08/2015 03:35:10
#450068
Resposta escolhida
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!
JORGESALES 16/08/2015 09:59:59
#450073
Deu esse erro:
DS2T 16/08/2015 12:13:55
#450081
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!
JORGESALES 16/08/2015 23:54:00
#450096
Não funcionou, deu o mesmo erro
DS2T 17/08/2015 01:12:31
#450101
Pode mostrar seu código?
JORGESALES 17/08/2015 15:32:42
#450136
        Dim texto As String
texto = WB.Document.body.Frame
txtVersao = Mid(texto, InStr(1, texto, [Ô]Versão [Ô]) + 7, 3)

DS2T 17/08/2015 18:54:47
#450147
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.



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!
JORGESALES 17/08/2015 20:52:12
#450154
Ao executar esse código:
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)
DS2T 18/08/2015 00:45:13
#450162
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:


    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.
JORGESALES 18/08/2015 08:31:16
#450168

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