Dag allen,
Als VBA noob ben ik aan het knippen en plakken gegaan van allerlei webscraping voorbeelden die ik maar kon vinden om uiteindelijk voor elkaar te krijgen wat ik wilde.
Het lastige aan dit project was dat het een laad meer resultaten button bevat.
Hoewel mijn bij elkaar gefrutselde VBA code werkt, ben ik benieuwd of het slimmer kan, misschien wat sneller en wat meer future proof is. Echter kom ik erachter dat mijn kennis en ervaring niet toereikend genoeg zijn om de oplossing te vinden.
Mocht iemand mij kunnen helpen schroom aub dan niet.
De code die ik gebruik:
Mij leek het zelf handiger door een soort van loop te hebben tot het disabled tegen komt in de button code, zie hieronder het vetgedrukte.
HTML Code voor elke keer dat je op de button kunt klikken.
HTML Code wanneer de hele lijst geladen is en er niet meer op de button geklikt kan worden.
Een loop tot aan disabled lijkt mij future proof genoeg, als er items aan de lijst worden toegevoegd waardoor er meerdere keren op laad meer resultaten button geklikt moet worden dan doet de VBA code dat automatisch voordat het bij mij in een excel sheet zet.
Ik heb andere berichten op dit forum gelezen over webscraping middels VBA, dat wanneer de structuur van een pagina verandert ik wel eens een niet werkend code zou hebben. Eerlijk ben ik dat niet zo bang voor aangezien de betreffende pagina al jaren wordt gebruikt op deze manier en zover ik weet dit ook voorlopig niet gaat gebeuren. Als dit wel zo is hoop ik op kleine wijzigingen.
Als VBA noob ben ik aan het knippen en plakken gegaan van allerlei webscraping voorbeelden die ik maar kon vinden om uiteindelijk voor elkaar te krijgen wat ik wilde.
Het lastige aan dit project was dat het een laad meer resultaten button bevat.
Hoewel mijn bij elkaar gefrutselde VBA code werkt, ben ik benieuwd of het slimmer kan, misschien wat sneller en wat meer future proof is. Echter kom ik erachter dat mijn kennis en ervaring niet toereikend genoeg zijn om de oplossing te vinden.
Mocht iemand mij kunnen helpen schroom aub dan niet.
De code die ik gebruik:
Code:
Sub LaadAllePaginaenScrape()
Dim i As Long
Dim URL As String
Dim ie As Object
Dim objElement As Object
Dim objCollection As Object
'Dim ieObj As InternetExplorer
Dim htmlEle As IHTMLElement
Dim e As Integer
e = 1
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
URL = "https://sportvloeren.sport.nl/sportvloerenlijst"
ie.navigate URL
Application.StatusBar = URL & " is loading. Please wait..."
Do While ie.readyState = 4: DoEvents: Loop
Do Until ie.readyState = 4: DoEvents: Loop
Application.StatusBar = URL & " Loaded"
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
botao = ie.document.getElementsByClassName("btn btn-primary center-block ng-binding")
botao.Click (1)
Application.Wait (Now + TimeValue("0:00:03"))
For Each htmlEle In ie.document.getElementsByClassName("table")(0).getElementsByTagName("tr")
With ActiveSheet
.Range("A" & e).Value = htmlEle.Children(0).textContent
.Range("B" & e).Value = htmlEle.Children(3).textContent
.Range("C" & e).Value = htmlEle.Children(4).textContent
End With
e = e + 1
Next htmlEle
End Sub
Mij leek het zelf handiger door een soort van loop te hebben tot het disabled tegen komt in de button code, zie hieronder het vetgedrukte.
HTML Code voor elke keer dat je op de button kunt klikken.
Code:
<button class="btn btn-primary center-block ng-binding" ng-disabled="!lastCallHadData" ng-click="addPage()" data-ajaxform-clicked="">
<span ng-show="loading" class="glyphicon glyphicon-refresh spinning ng-hide"></span> Laad meer resultaten
HTML Code wanneer de hele lijst geladen is en er niet meer op de button geklikt kan worden.
Code:
<button class="btn btn-primary center-block ng-binding" ng-disabled="!lastCallHadData" ng-click="addPage()" data-ajaxform-clicked="" [B]disabled="disabled[/B]">
<span ng-show="loading" class="glyphicon glyphicon-refresh spinning ng-hide"></span> Meer resultaten niet gevonden
</button>
Een loop tot aan disabled lijkt mij future proof genoeg, als er items aan de lijst worden toegevoegd waardoor er meerdere keren op laad meer resultaten button geklikt moet worden dan doet de VBA code dat automatisch voordat het bij mij in een excel sheet zet.
Ik heb andere berichten op dit forum gelezen over webscraping middels VBA, dat wanneer de structuur van een pagina verandert ik wel eens een niet werkend code zou hebben. Eerlijk ben ik dat niet zo bang voor aangezien de betreffende pagina al jaren wordt gebruikt op deze manier en zover ik weet dit ook voorlopig niet gaat gebeuren. Als dit wel zo is hoop ik op kleine wijzigingen.