Webseiten auslesen/ansteuern

Für allgemeine Fragen zur Programmierung mit PureBasic.
Beefi
Beiträge: 88
Registriert: 16.01.2017 17:38

Webseiten auslesen/ansteuern

Beitrag von Beefi »

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!
Benutzeravatar
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

Beitrag von TroaX »

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.
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 :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: Webseiten auslesen/ansteuern

Beitrag von Derren »

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)
Signatur und so
Beefi
Beiträge: 88
Registriert: 16.01.2017 17:38

Re: Webseiten auslesen/ansteuern

Beitrag von Beefi »

Hi ihr beiden,

vielen Dank für eure Antworten...das hat mir auf jeden Fall weitergeholfen und kann ich bestimmt noch gut gebrauchen :allright:

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
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Webseiten auslesen/ansteuern

Beitrag von Shardik »

Beefi hat geschrieben: 12.12.2021 21:03 Vorsicht, laut Hilfe-Beschreibung geht das nur auf Windows!
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).
Antworten