Jump to content

Recommended Posts

Posted

boas pessoal,

é o seguinte, tenho uma pagina que tem digamos que 100 nomes

ora estou a usar o innerhtml para o extrair para uma richtext ate ai tudo bem,

Agora, sei que no meio do html todo o que esta em comun é

_tab%22%7D">NOME</a></div><a class="uiLinkSubtle"

a minha duvida é como é que eu limpo tudo deixando apenas

nome1

nome2

nome3

e pro ai fora 🙂

Abraço

Posted (edited)

Boas,

e essa estrutura é sempre igual?

Podias usar algo assim:

Dim ConteudoHTML = "_tab%22%7D"">NOME1</a></div><a class=""uiLinkSubtle""" +
				"_tab%22%7D"">NOME2</a></div><a class=""uiLinkSubtle"""
Dim matches As MatchCollection = Regex.Matches(ConteudoHTML, """>(?<nome>[\w|\d\s]*)</a></div><a class=""uiLinkSubtle")
For Each match As Match In matches
TextBox1.Text += match.Groups("nome").Value + ";"
Next
Edited by nelsonr
Posted (edited)

Boas amigo, desde ja obrigado pela ajuda,

eu coloquei numa listbox

Dim ConteudoHTML = "_tab%22%7D"">NOME1</a></div><a class=""uiLinkSubtle""" +
							"_tab%22%7D"">NOME2</a></div><a class=""uiLinkSubtle"""
	Dim matches As MatchCollection = Regex.Matches(ConteudoHTML, """>(?<nome>[\w|\d\s]*)</a></div><a class=""uiLinkSubtle")
	For Each match As Match In matches
		ListBox1.Items.Add(match.Groups("nome").Value)
	Next

mas ao lista mostra

NOME1

NOME2

e nao os nomes que la estão no site :\

Edited by electric
Posted

Contornei este problema,

primeiro executo esta linha

RichTextBox1.Text = Wb.document.GetElementById("pagelet_timeline_medley_friends").InnerHtml

e depois uso o teu codigo com esta alteração

Dim ConteudoHTML = RichTextBox1.Text
    Dim matches As MatchCollection = Regex.Matches(ConteudoHTML, """>(?<nome>[\w|\d\s]*)</a></div><a class=""uiLinkSubtle")
    For Each match As Match In matches
	    ListBox1.Items.Add(match.Groups("nome").Value)
    Next

Agora reparei é que o meu browser nao faz o load de tudo... para carrgar toda a pagina tenho de puxar a pagina constantemente para baixo...

alguma maneira de conseguir fazer o load completo ?

Abraços

Posted (edited)

O codigo que dei era so um exemplo, claro que tinhas de substituir a variavel ConteudoHTML com o html lido.

O problema é que estás a ler logo o conteúdo, sem esperar que a página esteja toda lida.

Podes colocar o teu código no evento "DocumentCompleted" que é chamado apenas quando a pagina está toda lida:

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documentcompleted.aspx

Ou então, em vez de usares o componente webbrowser, podes usar assim:

'
Dim resp As System.Net.WebResponse = System.Net.WebRequest.Create("http://website").GetResponse
'
Dim ConteudoHTML As String
Using sr As System.IO.StreamReader = New System.IO.StreamReader(resp.GetResponseStream)
   ConteudoHTML = sr.ReadToEnd
End Using
'  
Dim matches As MatchCollection = Regex.Matches(ConteudoHTML, """>(?<nome>[\w|\d\s]*)</a></div><a class=""uiLinkSubtle")
For Each match As Match In matches
   ListBox1.Items.Add(match.Groups("nome").Value)
Next
Edited by nelsonr
Posted (edited)

Então a situação é outra, isso provavelmente está a capturar um evento de scroll para chamar uma função que preenche a pagina com mais informação.

Terás de descobrir qual o evento e usar o InvokeScript como está no nesta página:

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx

Edited by nelsonr

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.