Salve,avrei un quesito da porvi, da assoluto novello di vb.
Devo creare un programmino che una volta aperta la prima pagina di una ricerca di google va a cercare quali sono gli URL dei primi 10 risultati trovati.
Qualcuno di voi sa aiutare?
Salve,avrei un quesito da porvi, da assoluto novello di vb.
Devo creare un programmino che una volta aperta la prima pagina di una ricerca di google va a cercare quali sono gli URL dei primi 10 risultati trovati.
Qualcuno di voi sa aiutare?
Ciao.
Quello che puoi fare è utilizzare Microsoft HTML Object Library per referenziare il documento in questione.
Una volta referenziato, puoi leggerne e modificarne il contenuto.
La pagina la apri in un webbrowser o lanci il browser ?
devo lanciare in browser
Ok, allora potresti proprio utilizzare MS HTML Object Library.
Tieni presente però che potrai operare solo se il browser in uso è IE...
Devi aggiungere al tuo progetto un riferimento a questa libreria (Microsoft HTML Object Library) ed un riferimento
a "Microsoft Internet Controls".
Puoi farlo dal menu Project\References.
Nella libreria Microsoft Internet Controls, in particolare,
userai l'oggetto ShellWindows per metterti in "ascolto" dell'avvio di
eventuali nuove istanze di IE.
Questo oggetto, infatti, espone un'evento WindowRegistered che notifica appunto l'avvio di un'istanza di IE a cui rispondiamo controllando il tipo di documento
caricato nell'istanza appena avviata.
Se si tratta di un documento HTML, referenziamo l'istanza con un oggetto InternetExplorer.
A questo punto possiamo cominciare a gestire gli eventi di IE...cioè proprio dell'istanza di IE che è stata avviata.
L'evento che + ci interessa è DownloadComplete che notifica che il documento è stato completamente downloadato.
Qui possiamo creare un'oggetto HTMLDocument (disponibile grazie a MS HTML Object Library) per referenziare il documento HTML caricato su IE.
Utilizzando un oggetto IHTMLElement e ciclando sulla collection ALL di IE (che rappresenta tutti i tag HTML di un documento) cerchiamo quelli che ci interessano.
Ti posto un po' di codice, ricordati di impostare i riferimenti alle due librerie che ti ho detto.
All'avvio del progetto, apri una qualunque pagina Web e l'applicazione comincerà a leggere il documento cercando nella collection ALL tutti i tag A (collegamenti ipertestuali) e stampandone la destinazione (attributo href del tag a) sul Form.
Option Explicit
Private WithEvents ShWin As SHDocVw.ShellWindows ' ShellWindows
Private WithEvents IE As SHDocVw.InternetExplorer ' IE
'
Private Sub IE_DownloadBegin()
' Questo evento di IE si verifica all'avvio del download del documento.
' Da qui non è possibile riferirsi al documento in quanto non ancora caricato,
' ma si può operare sul Browser
' L'evento successivo è "IE_DownloadComplete"
End Sub
'
Private Sub IE_DownloadComplete()
' Questo evento di IE si verifica quando il documento è stato downloadato completamente.
' Imposto un riferimento al documento caricato e opero su di esso
Dim HTMLDoc As HTMLDocument ' Documento
Dim HTMLEL As IHTMLElement ' Elemento del documento
Dim j As Long
Set HTMLDoc = IE.document ' Riferimento al documento caricato da IE
' Modifico il testo nella statusbar e disabilito temporaneamente la Window di IE
IE.StatusText = "Attendere, " & App.EXEName & " sta esaminando il documento..."
Cls
' Ciclo sulla collection ALL in cui, ogni elemento è un'oggetto di tipo IHTMLElement
For j = 0 To HTMLDoc.All.length - 1
Set HTMLEL = HTMLDoc.All.Item(j)
' per ogni tag A (collegamento ipertestuale) stampo a video la destinazione
If UCase$(HTMLEL.tagName) = "A" Then
Print "Trovato tag link: con href " & HTMLEL.getAttribute("href")
End If
Next j
' Modifico il testo nella status e abilito nuovamente la Window di IE
IE.StatusText = App.EXEName & " ha esaminato il documento."
End Sub
Private Sub IE_OnQuit()
' Quando termina l'istanza di IE, libero risorse
Set IE = Nothing
End Sub
'
Private Sub ShWin_WindowRegistered(ByVal ICookie As Long)
' Questo evento di ShellWindows si scatena all'avvio di ogni nuova istanza di IE
' Controllo l'ultima istanza (quella appena avviata) nella Collection Count
' e, se si tratta di un documento HTML, imposto un riferimento all'istanza stessa.
' Da questo momento il browser comincia il download del documento:
' verrà quindi eseguita la routine di evento "IE_DownloadBegin"
If TypeOf ShWin.Item(ShWin.Count - 1).document Is HTMLDocument Then Set IE = ShWin.Item(ShWin.Count - 1)
End Sub
'
Private Sub Form_Load()
' Istanzia ShellWindows.
' Appena verrà aperta una pagina Web, verrà eseguita la routine di evento "ShWin_WindowRegistered"
Set ShWin = New SHDocVw.ShellWindows
Me.AutoRedraw = True
End Sub
Ciao e buon divertimento !
Simo
grazie per le dettagliate spiegazioni...ora mi metto all'otera per cercare di adattare il tutto al mio problema.
Solo un ultimo quesito....
Mettiamo che uno dei primi 10 risultati forniti da google sia una pagian php o asp e non html. A questo punto, mi sembra di aver capito che comunque, si vada a controllare il codice html generato alla fine del download della pagina. sbaglio?
grazie ancora per l'aiuto
Non sbagli ! Tu operi direttamente sul documento caricatoMettiamo che uno dei primi 10 risultati forniti da google sia una pagian php o asp e non html. A questo punto, mi sembra di aver capito che comunque, si vada a controllare il codice html generato alla fine del download della pagina. sbaglio?
sul browser...quindi codice HTML.
ora ho ancora un problema....
dopo aver aperto la prima di ricerca, i risultati ottenuti devo andare ad aprirli e cercare degli indirizzi email.
Io ho creato un altro riferimento al documento caricato in IE ma l'errore mi viene segnato proprio in quel punto
cosa devo fare per poter aprire più pagine Iexplorer per poterne fare il parsing?codice:Set HTMLDoc2 = IE2.Document