webseite ausfüllen und mit image button abschicken

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von gpn39f.

    webseite ausfüllen und mit image button abschicken

    Erstmal ein Hallo an alle,
    ich fülle also eine Seite aus und schicke sie über ein <input> feld ab. <input type=image name=wech src=...>
    Soweit kein Problem. Aber: Es werden bei einem SUBMIT durch ein IMAGE Feld 2 Systemvariable erzeugt und an PHP übergeben. Das ist die X/Y Position des Mausklicks. Der Name meines input-Images ist wech, also heissen diese Systemvariablen in meinem Fall wech_x und wech_y. Wird das Input Image mit Tabulator und Entertaste ausgewählt bleiben diese Variablen leer. Nur wenn es wirklich ein Mausklick war, der das SUBMIT ausgelöst hat, steht dort die Mausposition drin.

    Hier ist mein Problem versteckt. Die Seite die ich ausfüllen und abschicken möchte, wertet diese Positionsangabe aus. Fehlt diese, wird die Seite verweigert.
    Meine Frage:
    Was muss ich an die eInput Variable übergeben damit eine Virtuell erzeugte MausPosition(die Werte sind nicht wichtig, sie müssen nur >0 sein) mit an das PHP Script übergeben wird.

    Zum Testen hab ich auf meiner Homepage ein Bild zum Anklicken und man sieht beim ersten Aufruf das die x/y Felder leer sind, bei nachfolgenden Aufrufen steht dort die MausKlickPosition drin.


    gpn39f.dyndns.org/test


    das .NET 2005 Programm zum Austesten meiner Seite ist folgendes:


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. ' projektverweiss auf "microsoft.mshtml" setzen
    4. WebBrowser1.Navigate("gpn39f.dyndns.org/test")
    5. Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
    6. Application.DoEvents()
    7. Loop
    8. End Sub
    9. Private Sub AbschickenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AbschickenToolStripMenuItem.Click
    10. Dim doc As mshtml.HTMLDocument = WebBrowser1.Document.DomDocument
    11. Dim cInput As mshtml.IHTMLElementCollection = doc.getElementsByTagName("input")
    12. Dim eInput As mshtml.IHTMLElement = cInput.item("wech")
    13. ' hier müssten dem eInput weitere Werte übergeben werden ????
    14. eInput.click()
    15. Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete : Application.DoEvents(): Loop
    16. End Sub
    17. End Class


    Das Programm ruft also die Testseite auf und klickt über die sub dann auf das image( aufruf z.B. über die menüleiste)

    ich hoffe es gibt jemanden der mir helfen kann..Vielen Dank..
    frank


    Edit by Mad Andy:
    VB-Tag eingefügt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

    Hi!

    Sry, hab damals deinen Post nicht gelesen :(
    Ich bin zwar nicht so der Benutzer des IE-Controls, ich versuch dir aber mal zu helfen. Kann man beim IE-Control den Quelltext ändern? Wenn ja, kannst du einfach 2 Hidden-Felder rein machen, die wech_x und wech_y heißen.
    Wenn nicht, dann kannst du entweder die Maus simulieren oder ein eigenes HTTP-Request erstellen und dem Server vorgaukeln, dass du ein Browser bist.
    Wie letztes in .net geht, kann ich dir leider echt nicht sagen.

    OT: Da der dyndns deinen Nickname trägt, geh ich mal davon aus, dass das dein Heimrechner / -server ist. Wie kommts dazu, dass da Suse (Apache/2.2.3 (Linux/SUSE)) drauf ist und du ein .net-Programm entwickelst? :P


    so long..
    Andy
    nein im control kannst du nicht den quelltext ändern. das wäre auch nicht wirkungsvoll weil jeder Browser die feste funktion hat, beim anklicken eines "input picture button" auch die koordinaten des maus-klick-punktes im bild, mit an die aufrufende routine zu übergeben.

    im .net wird eine untermenge des IE browsers zur verfügung gestellt, und in den offiziellen anleitungen wird also dieses verhalten der parameter übergabe nicht erwähnt. das findet man in speziellen anleitungen für php.

    da dieses verhalten nicht erwähnt wird, gibt es also auch keine info wie man dieses von hand, über das framework 2.0, emuliert. es ist also nicht der browser der simuliert werden muss sondern die übergebenen parameter x/y.

    frank

    ps. ich hab hier einen opensuse server laufen und zwei winxp rechner.. die verschiedenen dienste sind über einen router zugewiesen..
    Hi!

    Du musst entweder das IE-Control dazu bringen nen Wert abzusenden, den es nicht selbst erfasst hat, die Nutzereingabe (Maus) simulieren, oder das ganze HTTP-Request selbst erstellen und somit den gesamten Browser simulieren.

    1. ist weg, 2 bleiben noch offen:
    2. Maus simulieren (Position setzen, Mausklick)
    oder
    3. HTTP-Request schicken. Ich vermute mal stark, dass die Werte einfach als Get bzw. Post angehängt werden. Was genau alles gesendet wird, kannst du dir mit

    PHP-Quellcode

    1. <?
    2. print_r($_GET);
    3. ?>
    bzw. mit

    PHP-Quellcode

    1. <?
    2. print_r($_POST);
    3. ?>
    anschauen und dann einfach das Request "nachbauen".


    so long..
    Andy

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mad Andy“ ()

    1.) auf meiner test-homepage läuft genau dieser teil zu abfrage:
    <?
    print_r($_POST);
    ?>
    ich lese dann die x/y koordinate aus den variablen aus und zeige sie im fenster an. das ist ja nicht das problem. das problem ist dem webbrowser control genau diese werte zu übergeben.
    2.) ich arbeite ja mit dem webbrowser control, und in diesem wird ein bild angezeigt das ich anklicke. im originbal sind es mehrere bilder an wechselnden positionen. hast du schon mal versucht herauszufinden wie die xy koordinate des bestimmten bildes im browser ist? wenn man die hätte könnte man den mausklick positionmieren und clicken..
    3.) ich benutze ja das framwork2 wie du an meinem VB demo sehen kannst. das aktuelle submit der form oder der seite wird in diesem fall durch das einput.click ausgelöst. ich müsste also, so wie meine eingangsfrage auch formuliert ist, genau vor diesem ereignis irgendwo die post variablen manipulieren. oder die mit zu sendenden wech variablen anmelden. die frage ist nur wie mache ich das im RL?
    frank
    Hi!

    ad 2) Man kann den Quelltext vom IE-Control auslesen. Wenn das Bild absolut positioniert ist, kommst du so ran. Anderenfalls kann man die Position auch irgendwie abrufen (da kenn ich mich aber leider nicht aus).

    ad 3) Das hätte dann nichts mehr mit dem IE-Control zu tun, sondern ein reines HTTP-Request. Also du schreibst in einen String das, was der Browser an den Webserver schicken würde, und dann sickst du das per API oder Framework (ohne IE-Control, etc.) an den Webserver.

    Würd mich jetzt noch interessieren, wofür genau du das brauchst um abschätzen zu können, ob Variante 2 oder 3 besser geeignet ist.


    so long..
    Andy
    ad3) geht nicht weil dann der erstellte post mit .navigate(url) abgeschickt wird. das wird aber duch den server registriert. es ist nur ein click erlaubt.

    ad2) das bild ist nicht absolut positioniert und variert in position und häufigkeit

    der webbrowser weiss natürlich von der position des bildes im browser und der mausposition über dem bild. die mshtml.dll simuliert den mausclick über den befehl .click(). dabei wird aber die position der maus über dem bild beim click nicht mit übergeben. schliesslich clickt auch nicht die maus sondern die dll.

    aber gibt es die möglichkeit die mit "post" zu übergebenen variablen zu bearbeiten??

    oder übergibt das img vielleicht die xy koordinate??