Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1600to1604
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Link in Webseite per VBA anklicken

Link in Webseite per VBA anklicken
10.01.2018 19:22:42
Stefan
Hallo Leute,
ich möchte gerne auf der folgenden Seite (als Beispiel)
http://www.scoresway.com/?sport=soccer&page=matches&date=2017-12-04
die Länder, die nicht "aufgeklappt" sind, per VBA aus excel alle anklicken um die Ergebnisse direkt einzusehen ohne manuell auf die einzelnen Links klicken zu müssen.
Quellcode (Beispiel für einen Link):
tr class="group-head clickable " id="date_matches-877"
Mein Code (nur für diesen Beispiellink):
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate "http://www.scoresway.com/?sport=soccer&page=matches&date=2017-12-04"
Do Until IEApp.Busy = False
Application.Wait Now() + TimeValue("00:00:03")
Loop
Set IEDocument = IEApp.document
IEDocument.getElementById("date_matches-877").Click
Set IEApp = Nothing
Funktioniert leider nicht.
Ich wäre sehr dankbar, wenn mir jemand helfen könnte.
Stefan

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Link in Webseite per VBA anklicken
11.01.2018 16:28:50
Zwenn
Hallo Stefan,
im eigentlichen Sinne ist es kein Link, den Du anklicken willst. Du willst ein JavaScript auslösen, um die AJAX Inhalte zu den Spielepaarungen nachzuladen. Das Entsprechende Script wird allerdings nicht durch einen Klick auf den TR-Tag ausgelöst, sondern bei einem Klick auf den ersten der beiden in einem TR-Tag enthaltenen TH-Tags.
Um alle Einträge zu öffnen, gehst Du auch nicht über die IDs, sondern über den CSS-Klassennamen "group-head clickable ". Dieser CSS-Klassenname wird ausschließlich für anklickbare Bereiche verwendet, hinter denen sich Spielepaarungen verbergen können. Außerdem kann man mit diesem CSS-Klassennamen einfach ein Array bilden, das dann mit For Each durchlaufen wird. Einträge, die nach dem Start des Makros nicht geöffnet erscheinen, haben keine Einträge von Spielepaarungen. Kannst Du ja einfach durch draufklicken testen.
Die zu öffnende URL kannst Du für andere Daten austauschen. Keine Ahnung, in welchem Zusammenhang Du dieses Makro benötigst, aber ich würde mir was basteln, wo ich in einer Excel-Tabelle nur das Datum eintrage und einen Button anklicke, um das Makro zu starten. Im Makro musst Du dann nur den Grundlink mit dem Eingetragenen Datum verbinden.

Sub AlleSpieleOeffnen()
Dim browser As Object
Dim knotenAst As Object
Dim knoten As Object
Dim url As String
url = "http://www.scoresway.com/?sport=soccer&page=matches&date=2017-12-04"
Set browser = CreateObject("InternetExplorer.Application")
browser.Visible = True
browser.Navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
Set knotenAst = browser.document.getElementsByClassName("group-head  clickable ")
If Not knotenAst Is Nothing Then
For Each knoten In knotenAst
knoten.getElementsByTagName("th")(0).Click
Next knoten
End If
Set browser = Nothing
Set knotenAst = Nothing
Set knoten = Nothing
End Sub

Ich denke das ist, was Du wolltest.
Viele Grüße,
Zwenn
Anzeige
AW: Link in Webseite per VBA anklicken
12.01.2018 19:00:05
Stefan
Hallo Zwenn,
vielen Dank für die sehr ausführliche Erklärung und die Lösung. Genau das ist es, was ich haben wollte.
Funktioniert im Prinzip auch. Allerdings öffnen sich nicht alle "Links". Scheint fast so, als würde die Internetseite die Anzahl der "Zugriffe" in einem bestimmten Zeitfenster limitieren. Dies zumindest mein Verdacht, denn für ein bestimmtes Datum mit wenigen "Links" gehen alle auf, während bei sehr vielen "Links" das Ganze nicht mehr wie gewünscht funktioniert.
Das müsste man dann wohl über eine kleine Zeitverzögerung in den Griff bekommen. Hast Du da vielleicht noch einen Vorschlag? Wäre super. Vielen Dank im voraus.
Stefan
Anzeige
AW: Link in Webseite per VBA anklicken
12.01.2018 19:42:18
Zwenn
Hallo Stefan,
ist ja schonmal gut, dass es grundsätzlich das macht, was Du wolltest :-) Poste doch mal bitte einen Link, bei dem das Vorgehen so nicht funktioniert. Ich habe nur geschlossene "Links" gesehen, die sich auch manuell nicht öffnen ließen, weil wohl keine Spiele drinstehen. Ich habe es aber nur mit 2 Daten ausprobiert.
Du kannst auch ausprobieren, ob es funktioniert, wenn nach jedem Click gewartet wird, bis der Browser die Daten fertig geladen hat. Dazu bauen wir einfach die Zeile Do Until browser.ReadyState = 4: DoEvents: Loop hinter den Click.

Sub AJAX_AlleSpieleOeffnen()
Dim browser As Object
Dim knotenAst As Object
Dim knoten As Object
Dim url As String
url = "http://www.scoresway.com/?sport=soccer&page=matches&date=2018-01-09"
Set browser = CreateObject("InternetExplorer.Application")
browser.Visible = True
browser.Navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
Set knotenAst = browser.document.getElementsByClassName("group-head  clickable ")
If Not knotenAst Is Nothing Then
For Each knoten In knotenAst
knoten.getElementsByTagName("th")(0).Click
Do Until browser.ReadyState = 4: DoEvents: Loop
Next knoten
End If
Set browser = Nothing
Set knotenAst = Nothing
Set knoten = Nothing
End Sub

Viele Grüße,
Zwenn
Anzeige
AW: Link in Webseite per VBA anklicken
14.01.2018 19:16:34
Stefan
Hallo Zwenn,
danke für die schnelle Antwort.
Die nicht geöffneten Links enthalten wirklich Spiele. Es ist wohl so, dass diese Links sich nicht mehr öffnen lassen (auch nicht manuell) wenn der erste Versuch sie zu öffnen gescheitert ist. Es ist wohl tatsächlich ein Zeitproblem, das dahintersteckt. Hab es jetzt mal mit verschiedenen Zeitverzögerungen probiert und bei 2 Sekunden innerhalb der Schleife funktioniert es anscheinend. Das verzögert die Sache natürlich schon erheblich, aber darum geht es mir nicht in erster Linie. Sondern um die Automatisierung des Prozesses um beispielsweise die Daten für ein komplettes Jahr nach excel zu ziehen.
Meine letzte Frage wäre jetzt noch: Interpretiert der Server jedes einzelne Aufklappen als einen separaten Zugriff, da Du ja sagtest, das wären keine echten "Links". Ich frage vor dem Hintergrund dass viele Anbieter von Daten im Netz es ja nicht gerne sehen, wenn "Roboter" Daten ziehen. Und ich möchte da keine schlafenden Hunde wecken...
Auf jeden Fall nochmals vielen Dank für die Hilfe.
Gruß
Stefan
Anzeige
AW: Link in Webseite per VBA anklicken
14.01.2018 21:23:17
Zwenn
Hallo Stefan,
das ist ja interessant. Ich habe es jetzt auch mit Deinen 2 Sekunden ausprobiert und es klappt so, wie Du geschrieben hast. Offenbar wird der Browser nicht wieder in den Zustand des 'beschäftigt seins' versetzt, wenn auf diese Weise Inhalte nachgeladen werden. Das war mir bisher unbekannt. Ok, dann dauert es eben. Aber da Du Dein Vorhaben so vollständig automatisieren kannst, spielt das, wie Du schon schreibst, eine untergeordnete Rolle. Dann lass das Makro doch eine Nacht laufen, um einen größeren Datumsbereich zu bearbeiten.
Die Technologie hinter dem Nachladen nennt sich AJAX (Asynchronous JavaScript and XML). Du kennst das mit Sicherheit auch z.B. von Facebook. Wenn man dort runterscrollt, dann werden weitere Inhalte nachgeladen. Auf Deiner Fußballseite wird das Nachladen durch einen Mausklick auf bestimmte Bereiche ausgelöst, bei Facebook durch Scrollen. Das Ergebnis ist das Gleiche: Es wird eine Anfrage an den Server gestellt, der neue Daten liefert. Insofern ist jeder Click wirklich eine neue Anfrage an der Server.
Hier kannst Du mal lesen, was es mit AJAX auf sich hat:
https://wiki.selfhtml.org/wiki/JavaScript/Ajax
Zu Deiner Frage:
In der Tat mögen viele Seitenbetreiber es nicht, wenn man ihre Seiten mit solchen Automatismen durchforstet. Meine Erfahrungen sind da sehr unterschiedlich. Hier mal drei Beispiele.
Ebay:
Ebay schaltet Captchas, sobald sie feststellen, dass dauernd automatisch zugegeriffen wird. Das bedeutet für ein Makro, es läuft ins Nirvana oder steigt mit einer Fehlermeldung aus. Vor einigen Jahren lag die Grenze etwa bei 400 Zugriffen, die hintereinander weg noch gut funktioniert haben. Die Lösung für mehr Zugriffe am Stück bestand darin, nach etwa 400 Zugriffen eine Pause von 10 Minuten zu machen. Auch das lässt sich im Makro automatisieren. Nach der Pause können dann die nächsten 400 Zugriffe erfolgen, ohne dass es Probleme gibt.
Uhren Graumarktplattform:
Wir hatten mal den Auftrag, eine Seite zu beobachten, auf der Luxusuhren gehandelt werden. Die Hersteller solcher Uhren haben sogenannte Selektivverträge mit ihren Händlern. Das bedeutet, sie lassen ihre Uhren nur von ausgewählten Händlern verkaufen. Uhren, die von nicht autorisierten Händlern verkauft werden, müssen also von einem autorisierten Händler stammen, der sie aber laut Vertrag nur an Endkunden verkaufen darf und auf keinen Fall an andere Händler. Der Verkauf durch andere Händler an Endkunden ist dabei aber vom Gesetz her nicht verboten. Die haben ja keinen Vertrag mit dem Hersteller.
Ich habe für diese Plattform ein Makro geschrieben, das einige Zeit bestens lief, bis wir eines Morgens feststellten, dass uns die Plattform ausgesperrt hat. Wir stellten dann fest, dass die unsere IP gesperrt haben. Wir haben uns also eine neue IP besorgt und weiter ausgelesen. Daraufhin wurden wir wieder gesperrt und so ging es einige Zeit, bis das Projekt abgeschlossen war.
leboncoin.fr:
Leboncoin ist eine französische Kleinanzeigenplattform, wie Quoka oder Ebay Kleinanzeigen in Deutschland. Auch für diese Seite habe ich ein Makro zum Auslesen programmiert. Das läuft seit mehr als 2 Jahren, ohne dass wir von denen jemals an irgend etwas gehindert wurden. Inzwischen haben wir damit etwa 3,5 Mio. Kleinanzeigen und 7 Mio. Fotos ausgelesen. Dort suchen wir für einen Kunden nach Diebstahlware.
Was wichtig ist, wenn man sich auf diese Weise Daten besorgt ist, dass nur Daten ausgelesen werden, die öffentlich zugänglich sind. Sobald Du Dich dafür irgendwo einloggen musst, wird es schnell haarig, sofern es sich nicht um Deine persönlichen Daten handelt. Z.B. ein Mailaccount von Dir. Wenn man anfängt personenbezogene Daten fremder Leute zu sammeln (Telefonnummern, Mailadressen, usw.) bekommt man quasi sofort Probleme mit dem Datenschutz. Deshalb würde ich davon immer Abstand nehmen. Bei unserer Arbeitsweise z.B. ist das auch nicht notwendig. Wir analysieren Angebote und wenn sich ein verdächtiger Account rauskristallisiert (Hehlerware, Fakes, Markenrechtsverletzungen), wird gezielt manuell ermittelt und in vielen Fällen wird dann auch die Polizei hinzugezogen. Natürlich nur bei Händlern in gewerblichem Ausmaß.
Weiterhin ist es wichtig, wofür Du die Daten verwendest. Wenn es für Dein privates Vergnügen ist, sehe ich da keine Probleme, wenn Du Dir ein paar Fußballergebnisse auf bequeme Art und Weise besorgst. Wenn Du mit den Daten vor hast, ein ähnliches Online Angebot aufzuziehen, wird man Dir das Abziehen der Daten als Diebstahl auslegen und Dir die Nutzung untersagen und vermutlich weitere Konsequenzen folgen lassen.
Alles in allem ist man also auf der sicheren Seite, wenn man den gesunden Menschenverstand walten lässt. Wie Du an meinen drei Beispielen siehst, bekommt man allenfalls technische Hürden zu spüren. Bisher hat noch niemand bei uns 'geklingelt' und ich habe für noch mehr Seiten Makros geschrieben. Am Ende kommt es vermutlich auch darauf an, wie groß so eine Seite ist. Der Graumarkt für Uhren hatte ein paar 1.000 Angebote online, leboncoin.fr hat fast 28 Mio. Angebote laufen. Wie stark Deine Fußballseite frequentiert ist, kann ich nicht sagen. Aber mit ein paar automatisierten Zugriffen dürftest Du da im Grundrauschen der Zugriffe untergehen.
Viele Grüße,
Zwenn
Anzeige
AW: Link in Webseite per VBA anklicken
15.01.2018 23:28:17
Stefan
Hallo Zwenn,
ich denke auch, dass meine "Anfragen" im Rauschen untergehen, denn diese Seite ist schon weltweit ziemlich frequentiert. Ich werde dann mal ein paar Jahre historische Daten ziehen um ein paar Analysen zu machen und dann täglich die aktuellen Daten ziehen und damit arbeiten. Ziel ist es, die "fairen" Quoten für Fussballspiele zu berechnen, diese dann mit den Quoten der Buchmacher zu vergleichen und damit den Buchmacher (auf Dauer) zu schlagen.
Danke nochmals. Super, dass es solche Foren gibt, wo einem schnell und kompetent geholfen wird.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige