Auslesen von HTML DIV id aus Browser

06/12/2017 18:25 aeo#1
Der Tastaturschreibkurs ist ein Web Service, welches dem Nutzer ermöglicht,
seine Geschwindigkeit und Präzision auf der Tastatur zu verfolgen.
Es werden unterschiedliche Wörter auf dem Bildschirm angezeigt, die in einer
Form eingegeben werden müssen.

Alle Wörter sind laut Quellcode in einem div-Container.

Meine Applikation soll nun alle Wörter aus der Webseite auslesen und sie
in einem Array speichern. Über das Array wird später iteriert, um die Wörter
in die Form einzugeben.

Laut der MSDN Api fand ich die Methode HtmlDocument.GetElementById,
welches vom Nutzen wäre.


Leider finde ich nichts nützliches, um auf die geöffnete Seite zuzugreifen und
das Element auszulesen.
Hier ist noch zu sagen, dass ich es nicht im Web Browser Objekt öffnen möchte.

Hat jemand da ein kleinen Rat?

Update:
Im Web Browser Objekt wird auch die Seite nicht richtig geladen (wegen JS error etc.) und die Seite wird
entstellt dargestellt. Das sieht im Programm nicht ordentlich aus, weshalb ich vorerst auf diese Lösung verzichten möchte.
06/12/2017 19:29 MrFifaUltimate#2
Kannst eventuell ne GET-Anfrage, zum Beispiel mit restSharp, stellen und die Rückgabe dann mit ner RegEx auseinandernehmen. Schön ist es nicht, aber kenne gerade keine einfachere Methode, da du den Webbrowser nicht nutzen willst. Gibt aber sicher auch fertige HTML-Parser.
06/12/2017 19:37 Ludder231#3
Webclient Klasse sollte am einfachsten sein. Und dann einfach RegEx. Alternative ist HtmlAgility Pack.
06/12/2017 20:17 aeo#4
Quote:
Originally Posted by MrFifaUltimate View Post
Kannst eventuell ne GET-Anfrage, zum Beispiel mit restSharp, stellen und die Rückgabe dann mit ner RegEx auseinandernehmen. Schön ist es nicht, aber kenne gerade keine einfachere Methode, da du den Webbrowser nicht nutzen willst. Gibt aber sicher auch fertige HTML-Parser.
Ich habe bereits ein Trace aber sah dass es HTTPS verwendet und ich nicht in
der Lage bin das nun zu Entschlüsseln. Wobei ich einige Referenzen durchgelesen habe, aber leider scheitere an einem bestimmten Punkt.


Quote:
Originally Posted by Ludder231 View Post
Webclient Klasse sollte am einfachsten sein. Und dann einfach RegEx. Alternative ist HtmlAgility Pack.
HtmlAgility sieht sehr schick aus und habe mal geschwind die Beispiele überflogen.
Falls du dich damit auskennst: Kann man damit auch auf ein Inputfield
einer Seite schreiben?
Falls nein, gibt es vllt ne win API mit der ich das kombinieren könnte?

Ich fand leider nichts darüber, wie ich ein Eingabefeld auf einer Webseite mittels C# auswähle und was hinschreibe.



Update

Ich habe gerade nochmal den Trace angeschaut. Die Verbindung ist zwar verschlüsselt, es wird aber bei Eingabe der Wörter keine weitere Anfrage verschickt.
Ich vermute, dass da eher clientseitig rumgefummelt wird.

Update2

Ein Blick auf das Zertifikat:
Garantiert die Identität eines Remotecomputers
Garantiert dem Remotecomputer Ihre Identität
heißt also nicht, dass sie die Verbindung SSL verschlüsseln.
Also hat sich das mit HTTPS auch erledigt.
06/12/2017 21:53 Ludder231#5
Mit HtmlAgility Pack kannst du soweit ich weiß nur auslesen. Was du brauchst ist wohl ein kleiner Browser wie Selenium o.ä. den kannst du wenn du willst mit HtmlAgility Pack kombinieren um die Daten auszulesen, jedoch würde ich dir einen einfachen regex empfehlen wenn du nur die Wörter auslesen willst. Den Browser kannst du dann it deinem Programmcode steuern.(Hab ich aber selbst noch nicht mit gearbeitet)
06/12/2017 23:25 aeo#6
Ich kenne selenium, mir war aber bisher nicht bewusst, dass das auch C# unterstützt.
Ich habe damals einen Streaming-Pythonscript geschrieben, welches automatisch nach Ablauf einer Serie auf bs.** die neue Folge startet.

Aber dir vielen Dank!
06/13/2017 13:04 florian0#7
Quote:
Originally Posted by dunkis View Post
Ein Blick auf das Zertifikat:
Garantiert die Identität eines Remotecomputers
Garantiert dem Remotecomputer Ihre Identität
heißt also nicht, dass sie die Verbindung SSL verschlüsseln.
Also hat sich das mit HTTPS auch erledigt.
Kannst du diesen Gedankengang noch mal näher erläutern? Wieso schließt du eine SSL Verschlüsselung aus?

HTTPS nutzt immer TLS (ehm. SSL genannt). Daran kann auch das Zertifikat nix ändern.
06/13/2017 20:04 aeo#8
Quote:
Originally Posted by florian0 View Post
Kannst du diesen Gedankengang noch mal näher erläutern? Wieso schließt du eine SSL Verschlüsselung aus?

HTTPS nutzt immer TLS (ehm. SSL genannt). Daran kann auch das Zertifikat nix ändern.
sorry, es war spät und die formulierung war definitiv nicht präzise.
die seite nutzt und verschlüsselt zwar die verbindung, doch die tastatureingaben werden clientseitig überprüft. deshalb schließe ich das mit http/https aus.

es wird daher bei der eingabe von falschen/richtigen wörtern kein paket über die ssl verbindung geschickt.

nochmals sorry. ich war einfach zu müde und im kopf schien ich irgendwie schon den nächsten satz zu schreiben.
06/17/2017 11:46 saixo#9
hmm hattte auch mal das js problem im eigenen browser. Kann dir leider nicht mehr sagen wie ich es gelöst hatte. War aber ziemlich schnell mit google erledigt ^^

HtmlAgilityPack + Browser ist schon mal ein guter Ansatz, aber keine feine Art dies umzusetzen. Muss das ganze eig mit c# gemacht werden oder bist du was sprachen angeht offen? :)

Aber da man mit dem normalen webbrowser control eigentlich auf den IE explorer zugreift kann ich mir vorstellen dass du das was du brauchst noch im IE aktivieren musst
07/04/2017 10:51 Moope#10
Quote:
Originally Posted by dunkis View Post
Der Tastaturschreibkurs ist ein Web Service, welches dem Nutzer ermöglicht,
seine Geschwindigkeit und Präzision auf der Tastatur zu verfolgen.
Es werden unterschiedliche Wörter auf dem Bildschirm angezeigt, die in einer
Form eingegeben werden müssen.

Alle Wörter sind laut Quellcode in einem div-Container.

Meine Applikation soll nun alle Wörter aus der Webseite auslesen und sie
in einem Array speichern. Über das Array wird später iteriert, um die Wörter
in die Form einzugeben.

Laut der MSDN Api fand ich die Methode HtmlDocument.GetElementById,
welches vom Nutzen wäre.


Leider finde ich nichts nützliches, um auf die geöffnete Seite zuzugreifen und
das Element auszulesen.
Hier ist noch zu sagen, dass ich es nicht im Web Browser Objekt öffnen möchte.

Hat jemand da ein kleinen Rat?

Update:
Im Web Browser Objekt wird auch die Seite nicht richtig geladen (wegen JS error etc.) und die Seite wird
entstellt dargestellt. Das sieht im Programm nicht ordentlich aus, weshalb ich vorerst auf diese Lösung verzichten möchte.
Könntest du mir den Link der Seite zukommen lassen? Würde gerne rumprobieren :D
Schon nervig genug das ich das mit Ins'tagr'am zB nicht hinbekommen habe, da die iwie den "auto fill" javascript seitig blockieren.. geht bei mir auch nur im virtual os mit sendkeys xD so traurig! (Keine bessere Lösung gefunden)