Formular einer Webseite "lesen", automatisch ausfüllen und abschicken



  • Liebe Community,

    ich bin neu hier im Forum und habe mich extra hierfür registriert, da ich nach Stunden, die ich mit Google verbracht habe, immernoch nichts gefunden habe.

    Ich möchte gerne ein Formular auf einer Webseite auslesen.
    Dieses Formular besteht aus einem Text, einem Captcha-Bild (das Bild ist ein Link auf eine HTML Seite, wo das Bild liegt, also http://example.com/img/bild.html), einer Textbox zur Lösung des Captchas und einem Button.
    Nun würde ich gerne den Link zum Bild direkt (nicht den HTML-Link) auslesen.
    Anschließend soll ein Text in die Textbox eingegeben und das ganze abgeschickt werden.

    <form id="captchaboxform" onsubmit="checkinput()" action="in.html" method="post">
        <div style="display:none">
            <input type="hidden" value="9f18aaeab1484f11fbaee52ed8a89b27d882ed13" name="CSRF_TOKEN"/>
        </div>
        <p class="msg">Bitte lösen sie das Captcha.</p>
        <br/>
        <div class="">
            <label for="captcha">Bestätigungscode</label>
            <div>
                <img id="yw0" src="/cap/53fa932892eb1.html" alt=""/>
                <br/>
                <input type="text" value="" name="verifyCode" id="verifyCode"/>
                <br/>
            </div>
        </div>
        <br>
        <div class="cbox">
            <span class="chead"> </span>
            <input id="ceyesbutton" type="submit" class="cssbuttongo" name="submit" disabled="disabled" value="Abschicken"/>
        </div>
    </form>
    

    Da ich relativ neu in C(++) bin, würde ich Code-Snippets (am besten kommentiert) bevorzugen, jedoch geht auch eine Dokumentation o.ä. (die relativ einfach verständlich ist, da ich - wie gesagt - nicht so viel Erfahrung mit C(++) habe).

    Vielen Dank im Vorraus!

    MfG


  • Mod

    Was denn nun? C oder C++? Warum überhaupt eine dieser beiden Sprachen? Die drängen sich ja nicht gerade auf zur Verarbeitung von Webseiten. Was genau heißt "relativ neu"? Was kannst du denn? Für einen absoluten Anfänger ist das Vorhaben viel zu ambitioniert (zumindest in einer dieser Sprachen, bei anderen mag das anders sein). Diese Vermutungen (und erst recht die Art, wie du deine Frage stellst) lassen darauf schließen, dass du einfach einen Dummen suchst, der dir dein Programm schreiben soll (und den Captcha-Löser noch dazu? Wozu überhaupt das Rad neu erfinden?). Was niemand machen wird. Lügengeschichten wie dass du stundenlang gegoogelt und nichts gefunden hast, kannst du dir auch gleich sparen. Entweder bist du der schlechteste Goolgenutzer aller Zeiten oder du hast nach einer Fix-und-Fertiglösung gesucht. Also genau das, was ich befürchte, was du hier ebenfalls erwartest.

    Siehe dringend den als wichtig markierten Thread "Du brauchst Hilfe?"!



  • HTML Code zu parsen ist nicht trivial.
    Ich würde da eher so Lösungen wie Scrapy nehmen, auch wenn sie in Python sind: http://scrapy.org/



  • @SeppJ: Dass du mir unterstellst, dass ich hier Schwachsinn schreibe, finde ich etwas unpassend, aber nunja.
    Ich kann nicht wahnsinnig viel C++, da ich davor lediglich mit C# u.ä. programmiert habe.
    Ich suche auch keinen Dummen, der mir das schreibt, sondern wie gesagt, fände ich auch Dokumentationen dazu nicht schlecht.
    Theoretisch habe ich auch schon herausgefunden, wie ich etwas in das Formular schreiben kann und mir fehlt eigentlich nur noch, wie ich diesen Link zu dem Captcha bekomme. Dieses werde ich logischerweise nicht selbst lösen (also mit meinem eigenem Programm), sondern über den Service DeathByCaptcha.

    Ich habe bspw. dieses Code-Snippet gefunden (mit Erklärung), jedoch kann ich damit nur ein Formular füllen, jedoch nicht bspw. den Link lesen.

    CString strHeaders =
          _T("Content-Type: application/x-www-form-urlencoded");
       // URL-encoded form variables -
       // name = "John Doe", userid = "hithere", other = "P&Q"
       CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q");
    
       CInternetSession session;
       CHttpConnection* pConnection =
          session.GetHttpConnection(_T("ServerNameHere"));
       CHttpFile* pFile =
          pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
                                  _T("FormActionHere"));
       BOOL result = pFile->SendRequest(strHeaders,
          (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
    

    @Shade Of Mine:
    Python würde eigentlich auch gehen, ich werde mir das mal ansehen.

    MfG


Anmelden zum Antworten