J'essaie de lire les données de paris de l'EPL sur Betfair . Lorsque j'exécute le sous-niveau suivant, les éléments.length retournent 0.
Sub PullBetfair()
' SOCCER
Const soccerEPL As String = "https://www.betfair.com.au/exchange/plus/football/competition/10932509" ' EPL
' DECLARE INTERNET EXPLORER
Dim ie As New InternetExplorer
ie.Visible = False
' NAVIGATE TO URL
ie.navigate soccerEPL
' LOOP UNTIL NAVIGATION COMPLETE
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
' COLLECT HTML DOCUMENT
Dim html As HTMLDocument
Set html = ie.document
' CREATE COLLECTION OF ELEMENTS
Dim elements As IHTMLElementCollection
Set elements = html.getElementsByTagName("section")
Debug.Print elements.Length
ie.Quit
Set ie = Nothing
End Sub
3 Réponses :
Ce qui suit utilise une attente appropriée et un test de boucle chronométrée pour la longueur. sections code> est une nodéliste donc un pour i = 0 à sections.length -1 code> est utilisé et les nœuds sont accessibles par .Item (i) .innertext code>. Vous pouvez faire progresser et utiliser Sections = .document.getelementsbytagname ("Section") code> puis `pour chaque" sur cela. P> P>
Grande bonne chance d'attendre!
J'ai écrit cette fonction que j'utilise pour charger des pages. Parfois, j'ai trouvé que la page ne vous rafraîchit pas correctement, est bloquée et ne complète jamais le chargement de la page.
Il dort pour 100 ms puis vérifie si la page est chargée, si elle ne finit pas le rafraîchissement / le chargement après 3 secondes qu'il rafraîchit et essaie à nouveau. p>
Vous l'utiliseriez comme ceci P>
Function waitForIEToLoad(ie As InternetExplorer)
Dim times, times2 As Integer
Do While ie.readyState <> READYSTATE_COMPLETE Or ie.Busy
DoEvents
Sleep 100
times = times + 1
If times = 30 Then
ie.Refresh
times2 = times2 + 1
If times2 = 3 Then
Exit Do
End If
End If
Loop
End Function
Je ne suis pas un expert, mais je me suis effréné en fonction de votre code. C'est mon petit ajustement et il semble fonctionner, mais pas comme prévu que le code s'écrase si c'est-à-dire que c'est pas prêt. Ce serait génial si vous pouviez intégrer les réponses des autres concernant les tests si c'est-à-dire que c'est prêt.
While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE
mHour = Hour(Now())
mMinute = Minute(Now())
mSec = Second(Now()) + 1 'Wait one more second
waitTime = TimeSerial(mHour, mMinute, mSec)
Application.Wait waitTime
Wend
...
Set elements = html.getElementsByTagName("tr")
For i = 1 To elements.Length - 1 '
Debug.Print elements(i).textContent
Next i
HTML est nouveau pour vous!?, Pourtant, vous sautez dans la gratte des sites Web de paris. Quelle valeur tout cet effort vous donne-t-il?
C'est parce que ReadyState tourne complète (4), tandis que le site Web est toujours en cours de chargement. Fix rapide: Mettez un retard / sommeil là-bas également. Certains sites Web vont altérer entre prêt-même: complet et occupé pendant le chargement. Vous apprenez ces choses lorsque vous devenez plus expérimenté.