COMO SABER COMO QUANTAS LINHAS SE REPETE

PROGRAMADORVB6 23/03/2011 13:10:36
#368894
Olá Galera!
Tenho este código em html e precisava de saber como posso contar quantas linhas tem : < li > .. </li> ? , só que feito em VB.NET
Isto tudo porque o site não disponibilizou Rss e só assim consigo saber quantos post novos há.

O Link é este : ttp://]http://www.montargilforum.com/ncforum/archive/index.php?f-52-p-8.html

O código HTML é este :

<div id=[Ô]content[Ô]>
<ol start=[Ô]1751[Ô]>
<li>Zona Desportiva de Montargil</li>
<li>Feliz Ano Novo</li>
<li>Delphi: um ano após fecho das portas em Ponte de Sôr!</li>
<li>Esperemos que não seja um mau presságio</li>
<li>Aniversário</li>
<li>Falecimento</li>
<li>Agradecimento</li>
<li>Secretário de Estado da Saúde preside à instalação de UCC’s na ULSNA.</li>
<li>EBI Montargil - Ambiente Positivo</li>
<li>Ciência e Novas Tecnologias - um novo Núcleo da Nova Cultura</li>
<li>Prates Miguel no [Ô]5 para a meia noite[Ô]</li>
</ol>
</div>

Grato desde já pela vossa atenção.
Atentamente.
Programadorvb6
JONATHANSTECKER 23/03/2011 13:28:52
#368899
Considerei como se esse código HTML estivesse dentro de um RichTextBox.

        Dim Contador As Integer = 0
For Each Linha As String In Me.RichTextBox1.Lines
If Linha.Contains([Ô]<li>[Ô]) And Linha.Contains([Ô]</li>[Ô]) Then
Contador += 1
End If
Next
MessageBox.Show(Contador)
PEGUDO 24/03/2011 09:56:28
#369002
[txt-size=6]Cara, pega este exemplo que eu fiz aí
Diferente do Jonathan, eu estou pegando os dados diretamente da página, no webbrowser

Acho que é o que você quer.

Se você quiser mudar de página, no endereço da página, basta trocar o número deste trecho:

f-52-p-[txt-color=#0000f0]2[/txt-color].html

pelo número da página que você quiser.
Se eu quiser visitar a página 8, por exemplo, no lugar do p-2.html eu colocaria p-8.html, assim:

f-52-p-[txt-color=#0000f0]8[/txt-color].html

Lembre-se de que eu fiz o programa ler os dados da página 2 no Load,
Se você quiser listar os dados de outra página tem que fazer um código para isso, em um botão ou depois que o webbrowser fizer refresh, sei lá.
Lembrando sempre de mudar o número da página, como eu mostrei acima.

Espero ter ajudado.[/txt-size]
PROGRAMADORVB6 24/03/2011 17:51:52
#369074
Olá boa noite.
Eu fiz assim para tentar ler as 8 páginas só que só lê 1 página.
Como posso solucionar ?

Public Class Form1


Public Sub CarregarWebBrowser()
While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
Application.DoEvents()
End While
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim Contador, Duplicado As Integer
Dim Conteudo As New Collection
Dim Texto As String
Dim Voltas As ULong
Dim Ligacao As String
Dim i As Long
Voltas = 0
For i = 0 To 8
Voltas = Val(Numero.Text) + 1
Ligacao = [Ô]http://www.montargilforum.com/ncforum/archive/index.php?f-52.html[Ô]
Ligacao = Ligacao.Insert(60, [Ô]-p-[Ô] & Voltas)
WebBrowser1.Navigate(Ligacao)

Numero.Text = Voltas


CarregarWebBrowser()

Threading.Thread.Sleep(2000)

Dim Lista As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName([Ô]div[Ô])

For A = 0 To Lista.Count - 1
If Lista(A).Id = [Ô]content[Ô] Then
Dim OutraLista As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName([Ô]li[Ô])
For B = 0 To OutraLista.Count - 1
Texto = OutraLista(B).InnerText
If Not Conteudo.Count = 0 Then
For Each Item In Conteudo
If Item = Texto Then
Duplicado += 1
End If
Next
Else
Conteudo.Add(Texto)
End If
Conteudo.Add(Texto)
Texto = [Ô][Ô]
Contador += 1
Next
GoTo Acabou
End If
Next
Next
Acabou:
Label2.Text = Contador.ToString
Label4.Text = Duplicado.ToString
End Sub
End Class
PEGUDO 25/03/2011 09:22:19
#369115
[txt-size=6]Pega aí, fiz uma alteração e o programa consegue listar todas as páginas, agora.

Agora você tem que pressionar o botão, deste modo você não espera o programa listar os tópicos pra depois aparecer o form.

Quando trabalhar com internet lembre-se desta regra:
Ao trabalhar com várias páginas no seu programa, ao fazer o WebBrowser trocar de página, o conteúdo das variáveis se perde.
Por exemplo, na linha:
[txt-color=#0000f0]Dim[/txt-color] Lista [txt-color=#0000f0]As[/txt-color] HtmlElementCollection = WebBrowser.Document.GetElementsByTagName([txt-color=#e80000][Ô]div[Ô][/txt-color])

Quando o WebBrowser trocar de página, se [txt-color=#0000f0]Lista[/txt-color] for iqual a 6 (por exemplo), ele voltará a ficar com 0 (zero)

Por isso que eu precisei colocá-lo dentro do [txt-color=#0000f0]For...Next[/txt-color] para que o programa listasse as tags [Ô]div[Ô] novamente.
[/txt-size]

Espero ter ajudado.
PEGUDO 25/03/2011 13:57:14
#369163
[txt-size=6]Se quiser coloque este código depois de:[/txt-size]

Acabou:
Label2.Text = Contador.ToString
Label4.Text = Duplicado.ToString

[txt-size=6]para apagar os cookies desta página que foram criados lá na pasta Cookies[/txt-size]

[txt-color=#0000f0]Dim[/txt-color] Usuario [txt-color=#0000f0]As String [/txt-color]= Environment.UserName
[txt-color=#0000f0]For Each[/txt-color] Arquivo [txt-color=#0000f0]As String In My[/txt-color].Computer.FileSystem.GetFiles([txt-color=#e80000][Ô]C:\Users\[Ô][/txt-color] & Usuario & [txt-color=#e80000][Ô]\AppData\Roaming\Microsoft\Windows\Cookies[Ô][/txt-color])
[txt-color=#0000f0]If[/txt-color] Arquivo.Contains([txt-color=#e80000][Ô]@www.montargilforum[Ô][/txt-color]) [txt-color=#0000f0]Then[/txt-color] File.Delete(Arquivo)
[txt-color=#0000f0]Next[/txt-color]
PROGRAMADORVB6 26/03/2011 07:46:07
#369231
Obrigado desde já pela vossa colaboração e alguma paciência.
Em relação aos cookies(fonciona!); o que eu pretendia era que ao entrar em uma página de modo automático e que não tivesse problemas, quando novamente quisesse aceder á mesma, após anteriormente ter feito o log out do site.
Quando tento entrar pela 2º vez dá-me este erro :



o código é este :

Imports System.IO
Public Class KeyKeeper

Dim Escolha As Long
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
WebBrowser1.Navigate([Ô]http://www.montargilforum.com/ncforum/forumdisplay.php?f=44[Ô])
Escolha = 2
End Sub


Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim i As Integer
Dim Usuario As String = Environment.UserName
If Escolha = 1 Then
If Me.WebBrowser1.ReadyState = WebBrowserReadyState.Complete = True Then
For i = 0 To WebBrowser1.Document.GetElementsByTagName([Ô]li[Ô]).Count - 1
ListBox1.Items.Add(WebBrowser1.Document.GetElementsByTagName([Ô]li[Ô]).Item(i).InnerText)
Next
End If
Escolha = 0
Exit Sub
End If
If Escolha = 2 Then
If Me.WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
WebBrowser1.Document.GetElementById([Ô]vb_login_username[Ô]).SetAttribute([Ô]value[Ô], Me.TextBox1.Text)
WebBrowser1.Document.GetElementById([Ô]vb_login_password[Ô]).SetAttribute([Ô]value[Ô], Me.TextBox2.Text)
WebBrowser1.Document.GetElementById([Ô]vb_login_password[Ô]).Focus() [ô] Porque o butão nao tem ID por isso [Ô]FóCO[Ô] nele
SendKeys.SendWait(Chr(13))
ClearCache()
Escolha = 0
Exit Sub
End If
End If
End Sub

[ô]Limpa Cache
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If ClearCache() = True Then
MsgBox([Ô]Cache Cleared[Ô])
Else
MsgBox([Ô]Cache not cleared[Ô])
End If
End Sub
Sub EmptyCacheFolder(ByVal folder As DirectoryInfo)
For Each file As FileInfo In folder.GetFiles()
file.Delete()
Next
For Each subfolder As DirectoryInfo In folder.GetDirectories()
EmptyCacheFolder(subfolder)
Next
End Sub
Public Function ClearCache() As Boolean
Dim isEmpty As Boolean
Try
EmptyCacheFolder(New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache)))
isEmpty = True

Catch
isEmpty = False

End Try
Return isEmpty
If (Not (ClearCache())) Then

End If

End Function
End Class

Obrigado desde já pela vossa atenção.
Atentamente.
Programadorvb6
PEGUDO 26/03/2011 17:05:14
#369286
[txt-size=6]Cara eu estava trabalhando em seu projeto quando eu descobri duas coisas:

1ª: Eu me inscrevi no forum para poder trabalhar melhor na página, mas toda vez que eu tento logar diz que meu email está incorreto.
2ª: A página tem uma coisa horrível para automatização web. Toda vez que o programa foca no controle para inserir o email do usuário,
a página dá um refresh automático e limpa todas as textbox de novo.

Por isso o programa nunca vai conseguir se logar e talvez seja por isso que dá este erro dizento que o objeto não está referenciado.
Se você se lembra, como eu falei, toda vez que a página dá um refresh ou muda de página, as variáveis se perdem.

Isto é um tipo de segurança que os admistradores colocam em suas páginas para evitar robôs.

Quanto ao botão, você pode fazerr desta maneira:

[txt-color=#0000f0]If[/txt-color] Escolha = 2 [txt-color=#0000f0]Then
If[/txt-color] Me.WebBrowser1.ReadyState = WebBrowserReadyState.Complete [txt-color=#0000f0]Then
With[/txt-color] WebBrowser1.Document
[txt-color=#0000f0]Dim[/txt-color] txtUsuario [txt-color=#0000f0]As[/txt-color] HtmlElement = .GetElementById([txt-color=#e80000][Ô]vb_login_username[Ô][/txt-color])
[txt-color=#0000f0]Dim[/txt-color] txtSenha [txt-color=#0000f0]As[/txt-color] HtmlElement = .GetElementById([txt-color=#e80000][Ô]vb_login_password[Ô][/txt-color])
[txt-color=#0000f0]Dim[/txt-color] Botao [txt-color=#0000f0]As[/txt-color] HtmlElementCollection = .GetElementsByTagName([txt-color=#e80000][Ô]input[Ô][/txt-color])

txtUsuario.InnerText = TextBox1.Text
txtSenha.InnerText = TextBox2.Text

[txt-color=#0000f0]For[/txt-color] A = 0 [txt-color=#0000f0]To[/txt-color] Botao.Count - 1
[txt-color=#0000f0]Try
If[/txt-color] Botao(A).OuterHtml.Contains([txt-color=#e80000][Ô]Entrar[Ô][/txt-color]) [txt-color=#0000f0]Then[/txt-color]
[txt-color=#007100][ô]Nesta parte o programa reconhece o botão [Ô]Entrar[Ô]
[ô]Adicionei uma referência ao Microsoft.mshtm em Add References/Aba .Net[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] Clique [txt-color=#0000f0]As[/txt-color] mshtml.IHTMLElement = Botao(A).DomElement
Clique.click()
[txt-color=#0000f0]End If
Catch[/txt-color] ex [txt-color=#0000f0]As[/txt-color] Exception

[txt-color=#0000f0]End Try
Next
End With[/txt-color]
ClearCache()
Escolha = 0
[txt-color=#0000f0]Exit Sub
End If
End If[/txt-color]

Vou continuar a trabalhar neste projeto para ver se eu consigo te ajudar e será um bom treinamento pra mim também
[/txt-size]
PROGRAMADORVB6 27/03/2011 07:30:07
#369334
Olá + uma vez.
Em relação ao codigo colocado ele funciona Blz.

O que acontece é quando volto a enviar os dados continua com o mesmo erro descrito.
Então resolvi mudar assim :
  WebBrowser1.Navigate([Ô]http://www.montargilforum.com/ncforum/[Ô])
Escolha = 2

Caso você queira testar o site e tiver problemas como entrar eu forneço a vc o User e pass.
Muito obrigado desde já pela sua atenção e paciência.
Atentamente
Programadorvb6

PEGUDO 28/03/2011 08:05:27
#369389
[txt-size=6]Olá,
O motivo de dar este erro é que o programa não estava realmente limpando o cache,
desta maneira, quando o programa acessava o forum de novo, o usuário já entrava logado,
então não existia a caixa para digitar o UserName, consequentemente, o programa não fazia
referência a ele, ou seja, a caixa de textos do UserName, da Senha e o botão de entrar não existiam no Body do página.

Solução:
Antes de logar, o programa, agora, verifica se o Body da página contém o link para Sair, caso ele exista, executa a ação de deslogar e, depois, loga.

Problema:
Pode ser que, em determinados momentos, aquela MsgBox que indica [Ô]Obrigado pela sua visita[Ô], apareça de novo, quando clicar em entrar, mas não é sempre que isso acontece.
Eu aconselho em deixar assim, pois até no Fórum da Microsoft, existem exceções e pequenos erros como este e isto não é uma coisa que vá fazer o programa deixar de funcionar.

Outra coisa:
1. Retirei o código do WebBrowser1_DocumentCompleted porque o código era executado toda vez que uma mudança ocorria na página e gerava leitura de código desnecessário.
Coloquei este mesmo código em uma Sub [Ô]Trabalho()[Ô]

2. Fiz uma Sub chamada [Ô]LimparCache()[Ô], mas não apaguei a que você fez.

3. A ListBox eu coloquei só para o programa poder rodar e não precisar mudar seu código nesta parte.

Agora faça os testes com o arquivo que enviei e veja se consegue adaptar ao seu código original.
abraços.
Qualquer coisa não hesite em perguntar.[/txt-size]
PROGRAMADORVB6 28/03/2011 21:39:29
#369536
Olá mais uma vez.
Exprimentei o código e está Blz!
Obrigado desde já pela sua paciência.
Tentei acrescentar um pouco o que vc escreveu tentado uniformizar para os tópicos seguintes.
Até que consigo fazer com que o programa faça uma 1ª leitura dos dados, mas quando escolho outro tópico o programa bloqueia.
Com toda acerteza que alguma rotina está em crash, e ainda não vi!
Deixo aqui o que adicionei.
Obrigado desde já sua paciência e dedicação.
Atentamente.
Programadorvb6
Página 1 de 4 [36 registro(s)]
Tópico encerrado , respostas não são mais permitidas