Inhalte einer Webseite programgesteuert ansprechen
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
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)
.GetElementById("maxbid").SetAttribute("value", CStr(_maxBid))
.Forms(0).InvokeMember("submit")
Gruß Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 289521
Url: https://administrator.de/contentid/289521
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
9 Kommentare
Neuester Kommentar
Moin,
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
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
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.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?
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!
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.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.
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 ??
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.
http://developer.ebay.com/devzone/xml/docs/reference/ebay/placeoffer.ht ...
Aber ich hab noch nicht gesehen, dass es auch eine API zum Bieten gibt.
Die gibt es, unter bestimmten Voraussetzungen schonhttp://developer.ebay.com/devzone/xml/docs/reference/ebay/placeoffer.ht ...
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 Da ist das was ich mir schon programmiert hab, wesentlich einfacher.
Function Bid(id,price) as boolean
"Einfach" ist doch langweilig