Ho giocato con i dati di scraping delle pagine Web utilizzando VBS/VBA.Utilizzare getElementById su HTMLElement anziché HTMLDocument
Se fosse Javascript, mi piacerebbe essere semplice, ma non sembra essere abbastanza semplice in VBS/VBA.
Questo è un esempio che ho fatto per una risposta, funziona ma avevo programmato di accedere ai nodi figlio usando getElementByTagName
ma non riuscivo a capire come usarli! L'oggetto HTMLElement
non ha quei metodi.
Sub Scrape()
Dim Browser As InternetExplorer
Dim Document As HTMLDocument
Dim Elements As IHTMLElementCollection
Dim Element As IHTMLElement
Set Browser = New InternetExplorer
Browser.navigate "http://www.hsbc.com/about-hsbc/leadership"
Do While Browser.Busy And Not Browser.readyState = READYSTATE_COMPLETE
DoEvents
Loop
Set Document = Browser.Document
Set Elements = Document.getElementsByClassName("profile-col1")
For Each Element in Elements
Debug.Print "[ name] " & Trim(Element.Children(1).Children(0).innerText)
Debug.Print "[ title] " & Trim(Element.Children(1).Children(1).innerText)
Next Element
Set Document = Nothing
Set Browser = Nothing
End Sub
ho cercato presso la struttura HTMLElement.document
, vedere se è come un frammento del documento, ma la sua sia difficile lavorare con o semplicemente isnt quello che penso
Dim Fragment As HTMLDocument
Set Element = Document.getElementById("example") ' This works
Set Fragment = Element.document ' This doesn't
Sembra che questa anche una lungo cammino tortuoso per farlo (anche se questo di solito è il modo di vba imo). Qualcuno sa se esiste un modo più semplice per concatenare le funzioni?
Document.getElementById("target").getElementsByTagName("tr")
sarebbe fantastico ...
Darò che un andare, ho provato qualcosa di simile, accedere alla mia pagina poi vai a un 'javascript:' url. ha funzionato, ma non molto bene. Sai se 'Document.parentWindow.ExecScript' sta bloccando? o il mio script potrebbe non terminare l'esecuzione prima che il risultato sia impostato? (mi metterò alla prova anche in un secondo). Mi piacerebbe comunque sapere se c'è un modo per farlo puramente con VB! – NickSlash
Questo non vuol dire querySelector non funzionerà con le DLL IE9 +, non ho appena testato quelli – mkingston
@NickSlash Ho modificato la mia risposta per rispondere al tuo commento. Per quanto riguarda il blocco, penso di sì, ma non ne sono sicuro. Dovrebbe essere abbastanza facile da testare (un paio di loop nidificati che contano fino a 2^31 o qualunque sia il numero intero massimo in JS). – mkingston