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é.