Liebe Forenmitglieder,
hin und wieder gibt es bei mir das Bedürfnis, Webseiten bzw. bestimmte Informationen von Webseiten auszulesen.
Ich muss jedoch sagen, dass ich mich speziell mit dem Thema "Webseiten" nicht sooo gut auskenne.
Aus klassischer und primitiver Sicht gesehen, ist für mich eine Webseite eine HTML-Datei, die heruntergeladen und dargestellt wird.
Oftmals reicht das aus, wenn ich eine Webseite per HTTPRequest herunterlade und nach der benötigten Info parse...fertig.
Das Problem dabei ist, dass es auf Webseiten oft Inhalte/Elemente gibt (offensichtlich durch Darstellung im Browser), die über diese HTML einfach nicht "sichtbar" sind.
Hier hört mein Latein schon auf.
Ein Beispiel:
Geht man auf die Seite https://duckduckgo.com/, dann sieht man oben rechts ein Megafon. Wenn man auf dieses Megafon klickt, erscheint eine kleine Liste mit den Inhalten "Twitter, Reddit, Blog, Newsletter".
Wenn ich mir die HTML ansehe (Edge-Browser: Seitenquelltext ansehen), steht hier jedoch kein Wort von "Reddit" im gesamten Quelltext.
Hier die Frage: Gibt es überhaupt eine Möglichkeit, irgendwie über ein Purebasic-Programm an diese Info zu kommen, bzw. einfach nur an das Wort "Reddit" ???
Wenn ich im Edge-Browser die Funktion nutze: "Rechtsklick -> Untersuchen", dann sieht man die Inhalte bzgl. "Reddit". Jedoch nicht per "Rechtsklick -> Quelltext anzeigen".
Eine zweite Frage:
Hier im Forum gibt es oben einen "Button" namens "Quick links". Klickt man darauf, geht eine kleine Liste auf (diese Inhalte sind übrigens in der HTML sichtbar).
In der Liste gibt es unter anderem den Eintrag "Your posts". Gibt es eine Möglichkeit in Purebasic, einen Klick auf "Your posts" zu simulieren bzw. die resultierende Seite des Klicks herunterzuladen?
Über ein paar Tipps zum Thema würde ich mich sehr freuen. Mit Purebasic kenne ich mich sehr gut aus...aber in Themen wie REST-Api bzw. so Web-Geschichten stecke ich nicht so tief drin.
Viele Grüße!
Webseiten auslesen/ansteuern
- TroaX
- Beiträge: 662
- Registriert: 08.03.2013 14:27
- Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
- Wohnort: NRW
- Kontaktdaten:
Re: Webseiten auslesen/ansteuern
Diese Daten werden asynchron zum eigentlichen Webseitenaufruf nachgeladen. Das bedeutet, das dort ein Javascript der Seite einen weiteren HTTPRequest an den Server sendet, um gezielt genau diese Informationen nachzuladen, ohne die komplette Seite neu laden zu müssen. Stichwort AJAX.
Die Quellcode-Anzeige über das Kontextmenü bezieht sich immer auf den ausgelieferten Quellcode im Cache. Durch den Inspektor bzw. den Dev-Tools des Browsers greifst du auf den DOM im Speicher zu, wo auch der Inhalt durch das AJAX bearbeitet wird und der Browser die Ansicht immer wieder bei Änderungen neu rendert.
Eine Möglichkeit wäre es, im Javascript nach der URL des AJAX-Requests zu suchen und dann diese ebenfalls zu laden. Sollte die Ressource aber eine Session voraussetzen, dann kann das aber auch nach hinten losgehen.
Die Quellcode-Anzeige über das Kontextmenü bezieht sich immer auf den ausgelieferten Quellcode im Cache. Durch den Inspektor bzw. den Dev-Tools des Browsers greifst du auf den DOM im Speicher zu, wo auch der Inhalt durch das AJAX bearbeitet wird und der Browser die Ansicht immer wieder bei Änderungen neu rendert.
Eine Möglichkeit wäre es, im Javascript nach der URL des AJAX-Requests zu suchen und dann diese ebenfalls zu laden. Sollte die Ressource aber eine Session voraussetzen, dann kann das aber auch nach hinten losgehen.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Re: Webseiten auslesen/ansteuern
Ich nutze dafür Chrome mit "--headless" Startparameter und einen Purebasic Websocket Client Code, der hier (oder im englischen) gepostet wurde, mit dem ich die nötigen Befehle (im JSON Format) an Chrome senden kann, bzw. an den Server, den Chrome für Remote-Debugging eröffnet.
Firefox kann das inzwischen auch, funktioniert natürlich aber wieder nur in der abstrakten Theorie gleich.
Damit kann ich beliebigen JS-Code auf einer beliebigen Website ausführen, z.B. Bilder oder Texte runterladen, oder auch ein Youtube Video liken (wenn man vorher die entsprechenden JS-Schnipsel zusammen hat, die zum Login nötig sind und man kein Captcha ausfüllen muss)
Firefox kann das inzwischen auch, funktioniert natürlich aber wieder nur in der abstrakten Theorie gleich.
Damit kann ich beliebigen JS-Code auf einer beliebigen Website ausführen, z.B. Bilder oder Texte runterladen, oder auch ein Youtube Video liken (wenn man vorher die entsprechenden JS-Schnipsel zusammen hat, die zum Login nötig sind und man kein Captcha ausfüllen muss)
Signatur und so
Re: Webseiten auslesen/ansteuern
Hi ihr beiden,
vielen Dank für eure Antworten...das hat mir auf jeden Fall weitergeholfen und kann ich bestimmt noch gut gebrauchen
Ich habe jetzt eine sehr simple Methode gefunden, mein Problem zu lösen, die ich gern mit euch teilen möchte...
Wenn man sich eine Webseite über die Standard-HTTP-Funktion herunterläd, dann erhält man (wie schon erwähnt) die blanke HTML-Seite. Hier sind Java-Inhalte nicht vorhanden, ebenso sind Steuerelemente wie Listen oder Dropdown-Felder nicht ausgefüllt (zumindest in meinen Fällen).
Man kann den vollständigen Code mit allen Informationen auslesen, wenn man das WebGadget von Purebasic benutzt...es kann dabei auch unsichtbar sein und einfach nur als Werkzeug/Funktion missbraucht werden
Ihr erzeugt also ein WebGadget und setzt die gewünschte URL per SetGadgetText().
Danach bekommt ihr den kompletten/umfangreichen Code, wenn ihr ihn per GetGadgetItemText(#Gadget, #PB_Web_HtmlCode) aus dem WebGadget ausliest. Vorsicht, laut Hilfe-Beschreibung geht das nur auf Windows!
Viele Grüße,
Andi
vielen Dank für eure Antworten...das hat mir auf jeden Fall weitergeholfen und kann ich bestimmt noch gut gebrauchen
Ich habe jetzt eine sehr simple Methode gefunden, mein Problem zu lösen, die ich gern mit euch teilen möchte...
Wenn man sich eine Webseite über die Standard-HTTP-Funktion herunterläd, dann erhält man (wie schon erwähnt) die blanke HTML-Seite. Hier sind Java-Inhalte nicht vorhanden, ebenso sind Steuerelemente wie Listen oder Dropdown-Felder nicht ausgefüllt (zumindest in meinen Fällen).
Man kann den vollständigen Code mit allen Informationen auslesen, wenn man das WebGadget von Purebasic benutzt...es kann dabei auch unsichtbar sein und einfach nur als Werkzeug/Funktion missbraucht werden
Ihr erzeugt also ein WebGadget und setzt die gewünschte URL per SetGadgetText().
Danach bekommt ihr den kompletten/umfangreichen Code, wenn ihr ihn per GetGadgetItemText(#Gadget, #PB_Web_HtmlCode) aus dem WebGadget ausliest. Vorsicht, laut Hilfe-Beschreibung geht das nur auf Windows!
Viele Grüße,
Andi
Re: Webseiten auslesen/ansteuern
Die Hilfe-Beschreibung für GetGadgetItemText() und SetGadgetItemText() ist inkorrekt, da diese Funktionen auch unter MacOS funktionieren. Ich habe aber hier in einem Multiplattfom-Beispiel gezeigt, wie #PB_Web_HTMLCode, #PB_Web_PageTitle und #PB_Web_SelectedText im WebGadget verwendet werden können (in Linux, MacOS und Windows).