Inhalte einer Webseite programgesteuert ansprechen

Mitglied: Aicher1998

Aicher1998 (Level 1) - Jetzt verbinden

27.11.2015, aktualisiert 20:06 Uhr, 1276 Aufrufe, 9 Kommentare, 1 Danke

Hallo,
ich möchte mir ein kleines eBay-Programm schreiben.

Dazu muss ich ja ständig Werte von der Webseite entnehmen. Zum Beispiel prüfen, ob ich noch Höchstbietender bin.
Ich mach das ganze mit einem Webbrowser, der für den User nicht sichtbar ist.

das ständige DocumentCompoleted hat mich aufgeregt (bitte nicht fragen warum...), hab deshalb das ganze über AddHandler gemacht, aber egal...

das Problem:
Mich stört der Webbrowser mit seinen Scriptfehler (ich weiß, kann man deaktivieren), dem Navigatonssound und dass die Cookies dann ja gespeichert sind und der User bei Verwendung des Webbrowsers gleich wieder eingeloggt ist.

Ich hab mir deshalb eine kleine Funktion geschrieben, mit der man den String einer WebResponse direkt in ein HtmlElement umwandeln kann.

Was ich nicht bedacht hab: Wenn man sich den eBay-Quellcode holt, dann enthält dieser ja noch nicht alle Inhalte, die man angezeigt bekommt, wenn man direkt mit dem Browser auf die Seite geht, da einige Elemente wohl nachgeladen werden.

Deshalb meine Frage:
Wie löse ich das am besten?

- Ich möchte keinen WebBrowser verwenden.
- Ich benötge aber den kompletten Quellcode, der auch im Browser zu sehen ist (den, den man erhält, wenn man auf "Element untersuchen" geht, nicht den, den man bekommt wenn man auf "Seitenquelltext anzeigen" geht)
- Ich muss folgendes trotzdem noch aufrufen können:

(bezieht sich auf das Document)


Gruß Chris
Mitglied: 122990
122990 (Level 2)
27.11.2015, aktualisiert um 17:37 Uhr
Moin,
Ich benötge aber den kompletten Quellcode, der auch im Browser zu sehen ist (den, den man erhält, wenn man auf "Element untersuchen" geht, nicht den, den man bekommt wenn man auf "Seitenquelltext anzeigen" geht)
das geht nur mit einer Browser-Instanz, ob jetzt mit den IE oder der Mozilla- oder der Webkit-Engine. Da JavaScripts und Ajax-Requests ja irgendwie ausgeführt werden müssen !
Ich muss folgendes trotzdem noch aufrufen können:
Geht ebenfalls nur mit einem Browser-Object. Oder eben komplett nur via POST/GET-Requests, wozu man dann die gesamte Kommunikation per Browser-Tools (Netzwerk-Tab) analysieren muss um entsprechend gültige Requests formen und abschicken zu können.

Ist nunmal Arbeit um die du nicht herum kommst, wenn du keine API nutzt.

Gruß grexit

p.s. für unabhängige Browser-APIs gibt es genügend APIs z.B. WebKit.Net
Bitte warten ..
Mitglied: Aicher1998
27.11.2015 um 17:41 Uhr
Zitat von @122990:

Moin,
Ich benötge aber den kompletten Quellcode, der auch im Browser zu sehen ist (den, den man erhält, wenn man auf "Element untersuchen" geht, nicht den, den man bekommt wenn man auf "Seitenquelltext anzeigen" geht)
das geht nur mit einer Browser-Instanz, ob jetzt mit den IE oder der Mozilla- oder der Webkit-Engine. Da JavaScripts und Ajax-Requests ja irgendwie ausgeführt werden müssen !
Kann ich die Mozilla- oder der Webkit-Engine einbinden, OHNE dass die Cookies speichert (sollen nur im Arbeitsspeicher bleiben und bei Schließung des Programms weg sein)?
Und ist da die Syntax bezüglich dem Ansprechen von HTMl-Elementen ähnlich wie beim IE?

Ich muss folgendes trotzdem noch aufrufen können:
Geht ebenfalls nur mit einem Browser-Object. Oder eben komplett nur via POST/GET-Requests, wozu man dann die gesamte Kommunikation per Browser-Tools (Netzwerk-Tab) analysieren muss um entsprechend gültige Requests formen und abschicken zu können.
Soweit ich weiß, kann man doch auch POST/GET-Requests senden, ohne ein WB Object zu haben, sondern nur über das HtmlElement, das die Form enthält?
Bitte warten ..
Mitglied: 122990
122990 (Level 2)
27.11.2015, aktualisiert um 17:47 Uhr
Zitat von @Aicher1998:
Kann ich die Mozilla- oder der Webkit-Engine einbinden, OHNE dass die Cookies speichert (sollen nur im Arbeitsspeicher bleiben und bei Schließung des Programms weg sein)?
Und ist da die Syntax bezüglich dem Ansprechen von HTMl-Elementen ähnlich wie beim IE?
Kannst du beides in deren Doku nachlesen. Jede API hat nunmal seine Varianten, aber das sollte für einen Programmierer kein Hindernis sein, ist ja sein täglich Brot, das lesen von APIs. Lernen muss man sein Leben lang.
Soweit ich weiß, kann man doch auch POST/GET-Requests senden, ohne ein WB Object zu haben, sondern nur über das HtmlElement, das die Form enthält?
Sag ich doch, damit du aber alle nötigen Eigenschaften mit in den POST-Request aufnimmst muss man eben die Kommunikation beim Abschickender Formulare wie oben geschrieben analysieren ...
Und eben in vielen Fällen die Cookies etc. vorher in Petto abgerufen haben!
Bitte warten ..
Mitglied: Aicher1998
27.11.2015 um 17:50 Uhr
Zitat von @122990:

Zitat von @Aicher1998:
Soweit ich weiß, kann man doch auch POST/GET-Requests senden, ohne ein WB Object zu haben, sondern nur über das HtmlElement, das die Form enthält?
Sag ich doch, damit du aber alle nötigen Eigenschaften mit in den POST-Request aufnimmst muss man eben die Kommunikation beim Abschickender Formulare wie oben geschrieben analysieren ...
Und eben in vielen Fällen die Cookies etc. vorher in Petto abgerufen haben!
Ich glaub wir haben uns missverstanden.
Du meintest - sofern ich das richtig gelesen hab - man brauche einen WebBrowser um ein Form abzusenden. das funktioniert ja auch, wenn man keinen WebBrowser hat, sondern nur das entsprechende HtmlElement, dessen quellcode man über eine HttpReponse erhalten hat.
Bitte warten ..
Mitglied: 122990
122990 (Level 2)
LÖSUNG 27.11.2015, aktualisiert um 20:06 Uhr
Zitat von @Aicher1998:
Ich glaub wir haben uns missverstanden.
Du meintest - sofern ich das richtig gelesen hab - man brauche einen WebBrowser um ein Form abzusenden.
Nein das meinte ich nicht.
das funktioniert ja auch, wenn man keinen WebBrowser hat, sondern nur das entsprechende HtmlElement, dessen quellcode man über eine HttpReponse erhalten hat.
Eben man muss die Seite abrufen die Cookies aufheben und mit dieser Session weitere entsprechende Requests abschicken. Sei aber gewarnt, viele Websites generieren Codes die es erschweren diese Dinge zu automatisieren so dass zum Beispiel mehrere Requests mit ein und der selben Daten verhindert werden. Wenn dann noch JavaScript mit ins Spiel kommt bist du damit wieder gearscht.
Gerade bei den großen wie "ebay/google/facebook" musst du schon eine gehörige Portion Wissen und Geduld mitbringen die Prozesse zu analysieren. Besser du nutzt direkt deren sehr gut dokumentierte APIs mit oAuth Authentifizierung , was sie alle ausnahmslos anbieten, alles andere ist unzuverlässiges Gebastel und nicht von Dauer.

Denn, ändert sich die Webseite, und das tun sie sehr oft, kannst du sonst deine Anwendung sofort wieder in die Tonne kloppen. APIs existieren meist in Revisionen, so dass man genug Zeit hat seine Anwendung entsprechend anzupassen, sollte eine ältere Version alsbald als "deprecated" gekennzeichnet werden.

Nutzt du keine APIs, kann deine Anwendung urplötzlich seinen Dienst einstellen und das ist eigentlich ein NO-GO, oder willst du periodisch diesen Analyse-Prozess wiederholen müssen damit deine Anwendung wieder ein paar Wochen halbwegs funktioniert ??
Bitte warten ..
Mitglied: Aicher1998
27.11.2015 um 20:11 Uhr
Vielen Dank!
Gerade bei eBay gibt es sehr viele hidden-Werte, die ich alle regexen müsste... Das spar ich mir lieber.
Aber ich hab noch nicht gesehen, dass es auch eine API zum Bieten gibt.
Wobei das ganz einfach selbst zu machen geht:

Code innerhalb der DocumentCompleted:
(StringToCC ist meine eigene Function, eigentlich ganz nützlich)


Bitte warten ..
Mitglied: 122990
122990 (Level 2)
27.11.2015, aktualisiert um 21:49 Uhr
Für private Spielereien OK, aber der Zweck ist fraglich, wo es doch AutoBieter en masse schon gibt, und bei der nächsten Anpassung bumms musst du wieder an den Quellcode, alles andere als komfortabel. Nette Spielerei also mehr nicht.

Aber ich hab noch nicht gesehen, dass es auch eine API zum Bieten gibt.
Die gibt es, unter bestimmten Voraussetzungen schon
http://developer.ebay.com/devzone/xml/docs/reference/ebay/placeoffer.ht ...
Bitte warten ..
Mitglied: Aicher1998
28.11.2015 um 11:06 Uhr
Da ist das was ich mir schon programmiert hab, wesentlich einfacher.
Function Bid(id,price) as boolean
Bitte warten ..
Mitglied: 122990
122990 (Level 2)
28.11.2015, aktualisiert um 15:33 Uhr
Zitat von @Aicher1998:

Da ist das was ich mir schon programmiert hab, wesentlich einfacher.
Function Bid(id,price) as boolean
Hält eben nur nicht lange ;-) face-wink
"Einfach" ist doch langweilig :-D face-big-smile
Bitte warten ..
Heiß diskutierte Inhalte
Off Topic
Realistische Gehaltsvorstellung für eine "IT-Allroundkraft"
gelöst JiggyLeeVor 1 TagFrageOff Topic19 Kommentare

Hallo an alle, ich hege momentan den Wunsch mich von der alten verstaubten Behörden Bürokratie und langweiliger Aufgaben los zu lösen und in einem ...

Windows 10
Windows 10 Geschwindigkeitprobleme trotz viel mehr Gb Ram
Matthes88Vor 1 TagFrageWindows 1045 Kommentare

Hallo ihr lieben aaaalso : Da mein neuer Arbeitsspeicher (32gb) von meiner alten Windows 7 version (max mit 8gb kompatibel) nicht angenommen wurde, habe ...

Humor (lol)
Tipp: Dinge, die man besser nicht klaut
altmetallerVor 1 TagTippHumor (lol)12 Kommentare

Hallo, so wurde meiner Hündin z.B. heute der (eingeschaltete) GPS-Tracker mit Mobilfunkanbindung quasi "direkt vom Halsband weggefunden". Akku hatte noch 60% :-P Und ich ...

Windows Server
GPU Passthrough HYPER-V 2019
bintesVor 1 TagFrageWindows Server8 Kommentare

Hallo, ich habe ein ein Problem mit der Bereitstellung einer Grafikkarte an eine virtuelle Maschine. Hardware: - HPE ProLiant DL380 Gen9 V4 Rack Server ...

Video & Streaming
Videoaufnahme funktioniert nur bis zum ersten Reboot (0x80040217)
IllusionFACTORYVor 1 TagFrageVideo & Streaming11 Kommentare

Ich nehme über eine Video-Software von einem USB-Hardware-Encoder Video auf. Das funktioniert exakt bis zum ersten Reboot - danach bekomme ich beim Starten der ...

Windows Server
Windows Admin Center DC
maximidVor 1 TagFrageWindows Server3 Kommentare

Hallo, ich hätte mal eine Frage zu Windows Admin Center und zwar schaue ich es mir aktuell etwas an da mir die zentrale Verwaltung ...

Grafikkarten & Monitore
Monitorhalterung mit 80cm Armlänge
ben1300Vor 23 StundenFrageGrafikkarten & Monitore7 Kommentare

Guten Abend ! ich bin auf der Suche nach einer Monitorhalterung, im besten Fall ohne Bohrung für einen 28" Monitor (Vesa Halterung). Nun kommt ...

SAN, NAS, DAS
Synology DS213j - Volume nach HDD Austausch vergrößern
gelöst JasperBeardleyVor 1 TagFrageSAN, NAS, DAS4 Kommentare

Moin, ich hab meinem NAS zwei neue 8TB spendiert, da die 3TB Platten jetzt 6 Jahre alt sind. Da die beiden Platten im JBOD ...