Captcha als .jpg runterladen

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von bildderfrau.

    Captcha als .jpg runterladen

    Hallo,

    da ich nicht weiß ob Waijkey das gleiche wie ich meint, schreib ich jetzt mal mein Problem: Ich habe diesen Quellcode

    Quellcode

    1. <div class="captcha_feedback"><script type='text/javascript'> var RecaptchaOptions = { theme : 'white' }; </script> <script type="text/javascript" src="http://api.recaptcha.net/challenge?k=6LffAwwAAAAAAHYaV40t4RX1Ngqv2ip1X84SlMQO"></script> <noscript> <iframe src="http://api.recaptcha.net/noscript?k=6LffAwwAAAAAAHYaV40t4RX1Ngqv2ip1X84SlMQO" height="300" width="500" frameborder="0"></iframe><br/> <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/> </noscript></div>
    und will nun das Captchabild runterladen. Wie kann ich das realisieren, da nur ein iframe da ist.

    Danke schon mal
    Hallo,

    du musst einfach den iframe in einem WebRequest(darf nicht im WebBrowser sein, wegen JavaScript) laden und anschließend den Link des Bildes herausfiltern...so sah es bei mir z.B. aus

    HTML-Quellcode

    1. <img id="recaptcha_image" width="300" height="57" alt="" src="/image?c=02I9bNq6yai7pjHyKLI6i2BaiHDYxdzXfgJq7VCelN88252sAjq4byiWaTphRzBNz8jTpJPaG8l20T0oAvpWJHNrsbzs7g1r42JZVy07v4yYNyFncvTdFvElu-93wWMklyvdZz0Ys0w2plzqDll0QKWQe7_OBCPsu17r9BHhngccazAmFshZyZiLXmfI1kaNO9Xwu2Bwu0HETH0iawM6UDPrSIf3U2-VMbL_pusQv19KsayynPETJV3E7HXsKIvzf_6pRi4VLoKYJGQq7kncBdo8UOQO4B">

    und dieses dann nur noch runterladen...

    Mfg jvbsl
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @jvbsl: hast du echt den link vom iframe genommen (also: api.recaptcha.net/noscript?k=6…aV40t4RX1Ngqv2ip1X84SlMQO?), weil ich bekomm durch ein webrequest (und einer quellcode ausgabe in einer richtextbox) immer noch kein img-Link sondern diese komische Javascript Nachricht. Das einzige was mich in die nähe des Links gebracht hat war der <script> link, aber da ändert sich pro aufruf immer der image link, sodass ich nicht glaube dass der link zum aktuellen captcha bild gehört.
    So habs geschafft :)
    Aber ein Problem hab ich noch: Ich bekomme bei folgendem Code

    Quellcode

    1. Dim Post As String = "name=" + lineVorname + "&sirname=" + lineNachname + "&country=DE&postal=" + Convert.ToDouble(GetRandomNum(10000, 90000)) + "&time=3600&gender=m&number=" + Convert.ToDouble(GetRandomNum(10000000000, 90000000000)) + "&month=" + Convert.ToDouble(GetRandomNum(1, 12)) + "&day=" + Convert.ToDouble(GetRandomNum(1, 28)) + "&year=" + Convert.ToDouble(GetRandomNum(1900, 2000)) + "&password=passwort&p_confirm=passwort&recaptcha_challenge_field=" + CaptchaAdresse + "&recaptcha_response_field=outive+meets&submit=Submit"
    diese Fehlermeldung:

    Quellcode

    1. Ungültige Konvertierung von der Zeichenfolge name=Alexander&sirname=T in Typ Double.
    erstens mal wäre es für andere sicherlich schön, wie du es geschafft hast?!

    und zweitens was macht die GetRandom Funktion?

    irgendwo muss diese Zeichenfolge in Double konvertiert werden...wobei ich dies am ehesten zu beginn sehen würde, aber irwie wird da ja niocht konvertiert...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Danke, hab wohl gestern den ganzen Wald vor lauter Bäumen nicht gesehen :)
    Andere Frage: Ich hab jetzt zwei WebRequests (ein für die Seite wo das Captcha benötigt wird und ein für die Seite wo das Captcha drauf ist), die aber nicht "synchron" zueinander sind. Damit meine ich, dass ein anderes Captcha benötigt wird als angezeigt. Gibt es eine Möglichkeit die Captchas gleichzeitig mit der Seite per WebRequest zu laden?

    Danke schon mal
    könntest du mir vielleicht ein Beispiel geben. Ich hab nur ein nennenswertes Beispiel gefunden und weiß nicht wie ich dieses so umschreibe, dass einmal das Captcha geholt wird und einmal per Post das Formular zum Captcha ausgeführt wird. Hier mal der Code:

    Quellcode

    1. // This can have any inputs and outputs you like, I'm just using it as an
    2. example, but it
    3. // is basically the entry point for your web request.
    4. public DataTable MyMethod()
    5. {
    6. // Create the three web requests.
    7. HttpWebRequest wr1 = ...;
    8. HttpWebRequest wr2 = ...;
    9. HttpWebRequest wr3 = ...;
    10. // This is the number of web requests that still have to complete.
    11. int requestsToComplete = 3;
    12. // The data table to return.
    13. DataTable dt = ...;
    14. // The event which will be called to indicate that processing is done.
    15. using (ManualResetEvent event = new ManualResetEvent())
    16. {
    17. // The async callback which will process the data. You will need
    18. // separate code for each if they have different routines to
    19. // populate the data table.
    20. AsyncCallback callback =
    21. delegate(IAsyncResult ar)
    22. {
    23. // Get the request from the state.
    24. HttpWebRequest request = ar.AsyncState as HttpWebRequest;
    25. // Call EndGetResponse.
    26. using (HttWebResponse response = (HttpWebResponse)
    27. request.EndGetResponse(ar))
    28. {
    29. // Add to the data table here. This is the code
    30. specific to the request.
    31. // You have to synchronize access to the table as well.
    32. lock (dt)
    33. {
    34. // Process the response here and add the rows you
    35. need to.
    36. }
    37. }
    38. // Decrement the count on the requests to complete. If it
    39. is
    40. // zero, then fire the event.
    41. if (Interlocked.Decrement(ref requestsToComplete) == 0)
    42. {
    43. // Set the event.
    44. event.Set();
    45. }
    46. };
    47. // Begin the calls here.
    48. wr1.BeginGetResponse(callback1, wr1);
    49. wr2.BeginGetResponse(callback2, wr2);
    50. wr3.BeginGetResponse(callback3, wr3);
    51. // Wait on the event here.
    52. event.WaitOne();
    53. // At this point, the data table will be populated, so you can
    54. return it.
    55. return dt;
    56. }
    57. }
    Naja das einzigste was ich dazu beitragen kann ist ich mache folgendes :

    Mit dem Webbrowser die Seite Laden dann hole ich mir den Pfad des Captchas :

    VB.NET-Quellcode

    1. Dim url As String = WebBrowser1.Document.GetElementById("captchaImage").GetAttribute("src")
    2. lbl_user.Text = url


    Und danach Downloade ich das Bild :

    VB.NET-Quellcode

    1. Dim wc As New WebClient
    2. wc.DownloadFile(lbl_user.Text, My.Application.Info.DirectoryPath & "\bild.jpg")

    Nur Halt ich hab das gleiche Problem das Captcha hat zwar die gleiche nummer am ende aber es kommt immer wieder ein anderes...

    Mfg
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    ich hab mir das schon bisschen angeguckt, nur kenn ich keine möglichkeit eine Datei nur zu öffnen, währenddessen diese bereits von einem Prozess verwendet wird, dann könnte ich mal gucken :P
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    OK, das ist mein Code, das einzigste Problem ist halt, dass das Captcha nicht (mehr) passt:

    Quellcode

    1. Dim httpRequest2 As HttpWebRequest = HttpWebRequest.Create("http://api.recaptcha.net/noscript?k=6LffAwwAAAAAAHYaV40t4RX1Ngqv2ip1X84SlMQO")
    2. Dim httpResponse As HttpWebResponse = httpRequest2.GetResponse()
    3. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    4. Dim httpContent As String = reader.ReadToEnd
    5. Dim adressenstring As New Regex("\<img id=\""recaptcha_image\"" width=\""300\"" height=\""57\"" alt=\""\"" src=\""/image\?c=(?<string>(.*))\"">\<\/center>\<\/td\>")
    6. Dim Adresse As String = adressenstring.Match(httpContent).Groups("string").ToString()
    7. 'Adresse ist der Link zum Captcha, den ich dan weiterverwenden will
    8. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create(Link.Text)
    9. httpRequest.Method = "POST"
    10. httpRequest.ContentType = "application/x-www-form-urlencoded"
    11. Dim Post As String = "LINK"
    12. Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
    13. httpRequest.ContentLength = byteArray.Length
    14. Dim DataStream As Stream = httpRequest.GetRequestStream()
    15. DataStream.Write(byteArray, 0, byteArray.Length)
    16. DataStream.Close()
    17. Dim Response As HttpWebResponse = httpRequest.GetResponse()
    18. DataStream = Response.GetResponseStream()
    19. Dim reader2 As New StreamReader(DataStream)
    20. Dim ServerResponse As String = reader2.ReadToEnd()
    21. reader2.Close()
    22. DataStream.Close()
    23. Response.Close()
    24. If InStr(ServerResponse, "Signout") Then
    25. MessageBox.Show("Login OK")
    26. Else
    27. MessageBox.Show("Login nicht OK")
    28. End If
    also, ich lad mir die Adresse vom aktuellen Captcha des ersten webReqeustes herunter und öffne danach ein zweites Request mit der Seite wo ich das Captcha eingeben muss, aber hier ist dann dass Captcha nicht mehr gleich, wie beim ersten Request. Oder teusche ich mich etwa?
    Das kommt drauf an ;)
    Es gibt Captcha da lautet die Captcha datei dann :

    captcha.php?id=2084jhfd80wsdhf

    und wenn du das aufrust ist das auch das gleiche Captcha es gibt allerdings auch Captchas so wie ich es habe da ändert es sich trotz der gleichen ID
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    ja, aber diese Captchas sind irgendwie schwieriger: Jedes Bild hat seine URL und jedes mal wenn man die Seite neu aufruft ist es ein anderes Captcha (andere URL). Mein Problem, ist dass ich nicht weiß wie ich mit einem WebRequest zwei URLs aufrufen kann (Seite wo Captcha angezeigt wird und Captcha URL)

    EDIT: Weiß keiner weiter? Hat keiner einen Tipp? Nehme auch Tipps aus anderen Programmiersprachen an. Wäre echt wichtig

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