Livetiming auslesen

Vom Front-End bis SOAP.

Moderator: Moderatoren

Antworten
Benutzeravatar
Christof
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 01. Okt 2007 17:14
Wohnort: Bedburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Livetiming auslesen

Beitrag von Christof »

Hallo,

hier mal etwas für die HTML-Freaks:

Ich versuche, diese Seite auszulesen, damit ich die Daten (rein privat) in einem Programm benutzen kann.
https://livetiming.azurewebsites.net/event=20?config=w5

Die Seite läuft auch nur, wenn Rennen der NLS (Nürburgring-Langstrecken-Serie) laufen. Z.B. "JETZT" (01.05.2021, 13:25 h).

Wenn ich mir den Quelltext ansehe, dann ist die Tabelle bzw. sind die Daten da gar nicht enthalten. Hat bestimmt etwas mit den Scripts zu tun, aber das kriege ich nicht hin.
Habe auch schon mal mit Selenium herumexperimentiert, aber auch da bin ich einfach noch viel zu laienhaft.

Wer hat eine Idee, eine Lösung?

Merci und Gruß
Christof
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Livetiming auslesen

Beitrag von Marcus Herz »

Ich vermute, die Daten kommen da rüber:

Code: Alles auswählen

<script src="/leaderboard.c758.bundle.js">
<script src="/vendor.6f89.bundle.js"></script>
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Livetiming auslesen

Beitrag von georg »

Hallo,


wenn es um das Auslesen von JavaScript geht, würde ich mal einen Blick auf phantomjs werfen. Das ist quasi ein Browser ohne Anzeige, mit dem man solche Seiten auslesen können sollte. (ich habe mich vor ein paar Jahren mal damit beschäftigt, aber aus Zeitgründen die Forschungen wieder eingestellt.)
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Livetiming auslesen

Beitrag von ramses »

Die Daten werden über die Scripte in kurzen Intervallen vom Server gelesen und entsprechend angepasst.

Ich habe mich auch schon mit einem solchen Fall beschäftigt und dann aufgegeben als ich bemerkt habe dass die Scripte und deren interne Variablen und Aufrufe auch immer wieder dynamisch verändert wurden und nie mit dem vorgehenden Event zusammenpassten. Es sollte damit geziehlt "Automatismus" und Nutzung verhindert werden.

Ich würde mal die Scripte (js) sichern und beim nächsten Event prüfen ob es noch die selben sind...... (MD5)

Wenn du weitemachen willst musst du in den Scripten die entsprechenden Aufrufe suchen mit denen die Daten vom Server abgerufen werden.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: Livetiming auslesen

Beitrag von Lewi »

Hallo,
diese Seite wird dynamisch mittels REACT und AJAX-Techniken erzeugt.

Daten aus einer Html-Tabelle zu extrahieren ist mit JS keine Raketenwissenschaft:

// Spalten auslesen
var table = document.querySelector( "table.sc-kkGfuU bnUbKEe tbody" );
var twentytwoColumn = table.querySelectorAll( "tr + tr td:nth-child(22)");

twentytwoColumn.forEach((element) => {
wert= element.style.data";
});

oder wie folgt:

// alle Table-Elemente der Seite
const allTds = document.querySelectorAll('td')

// Find das td element mit dem Text "labs"
const labsTd = Array.from(allTds).find(td => td.textContent === 'labs')

// Ermittelt den Index dieses Elements in Bezug auf seine Geschwister
const childIndex = Array.from(labsTd.parentNode.children).indexOf(labsTd)

// alle td Elemente in der Tabelle mit dem gleichen child index
const column = labsTd.closest('table').querySelectorAll(`td:nth-child(${childIndex})`

usw....

Viele Grüße,
Olaf
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Livetiming auslesen

Beitrag von ramses »

Hallo

Das geht aber nur wenn die Seite es zulässt dass du dein eigenes script noch einfügen kannst.
Ob dies hier geht? Falls ja hast du recht dann gehts einfach.
Bei meinem Versuch ging es nicht.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: Livetiming auslesen

Beitrag von Lewi »

Da die Seiteninhalte bei Aufruf der Site mit REACT dynamisch erzeugt werden, können extern auf die von React erzeugten Seiteninhalte nicht zugegrifen werden.
Ich habe es mit PHP getestet:

Code: Alles auswählen

        $quelltext_externe_seite = file_get_contents('https://livetiming.azurewebsites.net/event=20?config=w5');
Die Variable $quelltext_externe_seite enthält keine Daten sondern nur das HTML-Rahmengerüst dieser Seite. Die Tabelle wird von React bei dem Tag:

Code: Alles auswählen

<div id="root" style="display: inline-block;"></div>
eingefügt.

Bleibt nur noch die Frage, ob der Betreiber dieser Seite eine öffentlich zugängliche API zum Abruf der Daten zur verfügung stellt. Ansonsten muss die Seite manuell herunter geladen werden um auf die Inhalte zugeifen zu können.

Viele Grüße
Olaf
Benutzeravatar
Christof
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 01. Okt 2007 17:14
Wohnort: Bedburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Livetiming auslesen

Beitrag von Christof »

Erstmal DANKE an alle, die sich damit beschäftigt haben.

Scheint also leider nicht einfach zu sein. Aus Sicht des Anbieters verständlich.

@Lewi: Was meinst Du mit „manuell heruntergeladen“?

Ich stecke jetzt auch nicht mehr soooo viel Arbeit rein. Dann bleibt´s eben bei der angebotenen Darstellung. Ich hätte halt gerne z.B. das jeweilige Team und evt. ein Bild vom Auto dazu getan und einige vorhandene Spalten ausgeblendet.

VG
Christof
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Livetiming auslesen

Beitrag von ramses »

Christof hat geschrieben: Do, 06. Mai 2021 19:00 Ich hätte halt gerne z.B. das jeweilige Team und evt. ein Bild vom Auto dazu getan und einige vorhandene Spalten ausgeblendet.
Hallo Christof

aus eigener Erfahrung weiss ich dass die Daten-Anbieter z.T. mit nicht unerheblichem Aufwand versuchen genau solche "Nutzung" Ihrer (kostenlos) Daten zu verhindern. Weil meist wollen die (Anbieter) ja Ihre kostenpflichtige API vermarkten ...... Was ja auch verständlich ist .......
Valar Morghulis

Gruss Carlo
Antworten