Webseiteninteraktion und Captchas automatisch lösen

Webseiteninteraktion automatisieren, Captchas automatisch lösen lassen und Benachrichtigung auf das Handy senden

Ihr kennt das: ihr wartet auf eine Information auf einer Webseite und möchtet nicht ständig die Seite händisch aktualisieren und wolltet schon immer wissen, wie man eine Webseitenabfrage automatisiert und wie man Captchas automatisch lösen lässt?

Viel lieber soll ein automatisierter Prozess die Seite im Auge behalten und euch am liebsten eine Nachricht auf das Handy schicken, wenn die Information verfügbar ist? Hier wird gezeigt, wie anhand einer Beispielseite ( https://indibit.de/test-page-captcha ), ein Captcha durch Nutzung eines Webservices automatisch gelöst werden kann sowie die Interaktion mit einer Webseite automatisiert wird.

Was ist in dem Video zu sehen? Das Klicken der Maus, das Tippen in die Textfelder und das Lösen des Captchas erfolgt scriptgesteuert und nicht durch den User selbst!

Folgendes können wir jetzt hier lernen

  • Wie automatisieren wir Windows und die Interaktion z.B. mit einer Webseite?
  • Wie können wir die unbeliebten Captchas automatisch lösen lassen?
  • Wie kann uns ein automatisierter Prozess eine Push-Nachricht auf das Handy schicken?

was benötigen wir dazu?

Was ist AutoIt?

AutoIt ist eine Software, die es erlaubt eine Interaktion mit einem Windows-PC zu simulieren. D.h. ein ganz normaler Windows PC wird über eine Software und keinen echten User gesteuert. Die Sprache ist sehr einfach, orientiert sich an der Syntax, die jeder durchschnittliche Programmierer schon aus der Java oder .Net Welt kennt und lässt es zu sogar selbst kleine Applikationen erstellen zu lassen.

Was ist 2captcha.com ?

2captcha.com Ist ein Dienst, der Captchas in Form von Bildern entgegen nimmt und gegen Bezahlung das Captcha löst und über eine Schnittstelle die Zeichenkette als normalen Text zur Verfügung stellt. Das Ergebnis erhält man durch einen simplen Web Request, den man sogar im Browser aufrufen kann. Es liegt dann in Form einer Statusmeldung und einer Zeichenkette vor, die in der Regel der des Captchas entspricht. Der Dienst 2captcha.com sammelt die eingereichten captchas und stellt sie auf seiner Platform zum Lösen zur Verfügung. D.h. dass normale Menschen am anderen Ende der Platform sitzen und sich die Bilder ansehen und die Lösung eingeben. Die Plattform stellt dann das Ergebnis dem anfragenden zur Verfügung.

Als anfragender kann man dem gesendeten Captcha als Parameter die Komplexität des mitgeben. D.h. wird das Ergebnis case sensitive erwartet, sind Zahlen, Buchstaben, Sonderzeichen enthalten oder mehrere getrennte Worte usw.

Jedermann kann sich auf der Platform registrieren und captchas lösen. Wer Lust hat, kann sich gern als Captcha-Löser probieren – immerhin kann man damit pro Captcha 0,0001 $ verdienen…..

Das Lösen lassen von 1000 Captchas kostet ca. 1 $ – bezahl werden kann mit Paypal – innerhalb von Sekunden ist der Account mit dem 1 $ befüllt und kann genutzt werden.

Vorbereitung

AutoIt installieren ( Standard installationsverfahren – Ok -> Ok -> Weiter .. usw.)

PycURL  zip file entpacken und den Inhalt des Ordners site-package in den python Ordner der lokalen Installation kopieren(z.B. C:\Python34\Lib\site-package)

Wichtig zu wissen ist, dass ich in meinem Beispiel einen Windows7 PC nutze mit Google Chrome als Browser und einer Auflösung von 1600 x 900 Pixeln. Wahrscheinlich müsst ihr in dem Script die Pixelkoordinaten an eure jeweilige Auflösung und ggf. Skalierung usw. anpassen. In dem Quellcode finden sich zwei Stellen, die „YourAPIKey“ enthalten –  an dieser Stelle müsst ihr euren eigenen API Key, den ihr von 2captcha.com erhalten habt einsetzen.

Los gehts:

Öffne aus dem Startmenü dem den AutoIt v3 SciTE Script Editor. Du kannst sofort in dem geöffneten Dokument beginnen. Als erstes erstellen wir eine neue Instanz von Chrome zu öffnen zusammen mit der Webseite, die abgefragt werden soll. Solltest du einen anderen Browser nutzen wollen, musst du nur nach dem Run() Kommando den entsprechenden Pfad zum Browser angeben und den window_title anpassen.

#include <Constants.au3>
#include <ScreenCapture.au3>
#include <Date.au3>
#include <Inet.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>

;
; Author: Heiko
;

ClipPut("") ; Zwischenablage initial leeren
Run("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe https://indibit.de/test-page-captcha/") ; Google Chrome aufrufen - bei Bedarf muss der Pfad zum Browser angepasst werden

$window_title = "Test-Page-Captcha - indiBit - Google Chrome"

; get window handle
$window_handle = WinWait($window_title)

; Fenster initial maximieren
WinSetState ( "Test-Page-Captcha - indiBit - Google Chrome", "",@SW_MAXIMIZE) ; Der Fenstertitel des Prozesses, der maximiert werden soll

Nach dem Öffnen lassen wir die Maus ein klein wenig für uns arbeiten. Es soll in das Feld geklickt werden, in dem der Name einzutragen ist. Danach lassen wir das Script die Tab-Taste drücken, um zu den nächsten Eingabefeldern zu springen und lassen sie entsprechend automatisch ausfüllen. Im letzten Schritt wird das angezeigte Captcha-Bild lokal gespeichert. Somit haben wir die Webseitenabfrage automatisiert:

AutoItSetOption("MouseCoordMode", 0)
BlockInput(1)
;warte 1 Sekunden
Sleep(5000)
MouseClick("left", 300, 300, 1)
Send("Heiko")
Send ("{TAB}")
Send("Deine-Email-Adresse@test123.123")
Send ("{TAB}")
Send("Dein Betreff")
Send ("{TAB}")
Send("Deine Nachricht")
Sleep(1000)
MouseClick("right", 250,685, 1)
Sleep(2000)
MouseClick("left", 260,505, 1)
Sleep(1000)
;Namen "captcha" eingeben
Send("captcha")
Sleep(1000)
;Enter drücken
Send("{Enter}")
Sleep(1000)
;mit "j" bestätigen, falls das PNG schon vorhanden ist
Send("j")
sleep(1000);

Jetzt liegt das Captcha in Form einer PNG-Datei auf dem Desktop des angemeldeten Users. Dieses Bild kann jetzt per Web-API zu dem Dienst 2captcha.com geschickt werden. Im Durchschnitt liegt die Lösung des Captchas nach 10 Sekunden vor und kann in das Abfragefenster eingefügt werden.

2captcha.com Ist ein Dienst, der Captchas in Form von Bildern entgegen nimmt und gegen Bezahlung eine Ergebnisantwort schickt. Das Ergebnis erhält man durch einen Web Request. Das Ergebnis liegt dann in Form einer Statusmeldung und einer Zeichenkette vor, die in der Regel der des Captchas entspricht. Der Dient 2captcha.com sammelt die eingereichten captchas und stellt sie auf der Platform zum Lösen zur Verfügung. Das Lösen lassen von 1000 Captchas kostet ca. 2$ Wer Lust hat, kann sich auch gern als Captcha-Löser probieren – immerhin kann man damit pro Captcha 0,0001 $ verdienen…..

zu lösendes Captcha:captchas automatisch lösen
Ergebnis von 2captcha.com:captchas automatisch lösen

 

 

 

 

Um den Captcha lösen zu lassen, muss das Bild per simplem WEB-Request als Multipart Dokument versendet werden.

;für den Webrequest zu 2captcha.com benötigen wir eine TCP-Verbindung
TCPStartup()
Local $file = "C:\Users\Heiko\Desktop\captcha.png"
 
$tcp = TCPConnect(TCPNameToIP("2captcha.com"), 80)
Local $boundary = "-----" & Random(10000000, 99999999, 1)
 
Local $data = "--" & $boundary & @CRLF
$data &= 'Content-Disposition: form-data; name="file"; filename="' & "captcha.PNG" & '"' & @CRLF & 'Content-Type: image/jpeg' & @CRLF & @CRLF
 
Local $data2 = @CRLF & "--" & $boundary & @CRLF & 'Content-Disposition: form-data; name="method"' & @CRLF & @CRLF & "post" & @CRLF
$data2 &= "--" & $boundary & "--" & @CRLF & @CRLF
 
Local $data3 = @CRLF & "--" & $boundary & @CRLF & 'Content-Disposition: form-data; name="key"' & @CRLF & @CRLF & "YourAPIKey" & @CRLF
$data3 &= "--" & $boundary & "--" & @CRLF & @CRLF
 
Local $header = 'POST /in.php HTTP/1.1' & @CRLF
$header &= 'Host: 2captcha.com' & @CRLF
$header &= 'User-Agent: AutoIt/'&@AutoItVersion&' ('&@OSVersion&'; '&@OSServicePack&'; '&@OSArch&')' & @CRLF
$header &= 'Content-Type: multipart/form-data; boundary=' & $boundary & @CRLF
$header &= 'Content-Length: ' & (StringLen($data) + StringLen($data2) + StringLen($data3) + FileGetSize($file)) & @CRLF & @CRLF
 
TCPSend($tcp, $header)
TCPSend($tcp, $data)
TCPSend($tcp, FileRead(FileOpen($file)))
TCPSend($tcp, $data2)
TCPSend($tcp, $data3)
 
$r = ""
$i = 1
;in einem Tooltip-Fenster die Antwort des Serveres ausgeben.
While ($i<10)
$r &= TCPRecv($tcp, 1024)
ToolTip($r, 0, 0, "Debug")
$i = $i+1
if($i = 9) then
Sleep(1000)
EndIf
WEnd

Im nächsten Schritt nehmen wir die CaptchaID, die das hochgeladene Bild bekommen hat entgegen und fragen die Lösung ab:

;Response des Webrequest entgegen nehmen. In Zeile 10 verbirgt sich die CaptchaID, die benötigt wird, um die Lösung abzufragen
 $r &= TCPRecv($tcp, 1024)
 $res = StringSplit($r,@CR) ; Bei jedem Carriage Return den Text splitten
 ;_ArrayDisplay($res);Inhalt des StringSplit ansehen
 ConsoleWrite("inhalt: " & $res) ;Bei Bedarf anzeigen lassen
$captchaID = $res[10]
sleep(1000)
If (StringInStr($captchaID, "OK|") ) Then
 $captchaID = StringReplace($captchaID,"OK|","") ; das "OK|" wegpasren
 ;Daten für den Webrequest zu Abfragen der Lösung vorbereiten
 $sPD = 'id=$captchaID'
 $oReceivedResult=""
 ;50 mal probieren, ob es eine Lösung gibt.
 For $k = 50 to 1 Step -1
   Sleep(2000)
   $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
   $oHTTP.Open("GET", "http://2captcha.com/res.php?key=YourAPIKey&action=get&id=" & $captchaID, False)
   $oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
   ; request absenden
   $oHTTP.Send($sPD)
   ; In der Response ist entweder enthalten, dass das Captcha noch nicht gelöst ist (Captcha not ready) od  er die Lösung - (oder eine andere Fehlermeldung)
   $oReceived = $oHTTP.ResponseText
   $oStatusCode = $oHTTP.Status
   $oReceivedResult = $oReceivedResult & $oReceived & @CRLF
   ToolTip($oReceivedResult, 0, 200, "Captcha Check")
   $oReceived = StringReplace($oReceived,"OK|","") ; von der Lösung das "OK|" wegparsen
   If ($oReceived= "CAPCHA_NOT_READY") Then
     Sleep(500)
   Else
     $k=1
   EndIf
   If $oStatusCode <> 200 then
   MsgBox(4096, "Response code", $oStatusCode)
   EndIf
 Next

Wenn die hoffentlich richtige Lösung übertragen wurden ist, kann sie in das dafür vorgesehene Eingabefeld geschrieben werden.

MouseClick("left", 250,710, 1);in das Eingabefeld klicken, um die Lösung einzugeben

 Sleep(1000)

 Send($oReceived)

 Sleep(500)

 MouseClick("left", 250,750, 1); Ok Button klicken

Folgende Funktion nimmt den Screenshot auf und sichert ihn in der Dropbox. Der Link zum Bild wird später per E-Mail versandt, so dass man ggf. auf dem Handy direkt prüfen kann, ob das Ergebnis den Erwartungen entspricht.

Func Screenc()

 $filename = @MON&@MDAY&@HOUR&@MIN&@SEC ; filename bestht aus dem Zeitstempel

 _ScreenCapture_SetJPGQuality(70) ;JPG Qualitât auf 70 setzen - sollte reichen

 _ScreenCapture_Capture("C:\Users\Heiko\Dropbox\Public\kitasucher_" & $filename & ".jpg") ; Screenshot im Dropbox-Ordner speichern - oder einen belibiegen anderen.

 Return ("https://dl.dropboxusercontent.com/u/XXXXXXX_Dein_Link_XXXXXXXX/kitasucher_" & $filename & ".jpg")

EndFunc ;==>Screen

Wie der Screenshot per E-Mail versandt wird folgt in einem nächsten Beitrag.

Verwendete Quellen:

https://2captcha.com/api-2captcha

https://autoit.de/wiki/index.php/Tutorial

https://www.autoitscript.com/forum/

http://brugbart.com/http-get-request-autoit

http://videos.cctvcamerapros.com/digital-io-alarm-in-out/send-push-notifications-from-raspberry-pi.html#setup-push-apps

Und hier noch eine klare Empfehlung für alle, die auch außerhalb des IT-Bereiches mehr erreichen wollen:

Idee zum Verschenken für Weihnachten: Du möchtest lernen, wie man Tiere oder Gesichter malt oder dieses Online-Video-Training verschenken? Dann schau bei den Kollegen von Happy Painting vorbei.
BK1

oder verschenke ein ebook in dem man lernt, wie die milchstrasse fotografiert werden kann

Slider

Heiko

Heiko

Ich bin Entwickler und Koordinator für Datenbanken, Data Warehouse Systeme und IT im Gesundheitswesen. Spezialisiert habe ich mich auf MS-SQL SSIS, SSAS und Data Vault. Im Jahr 2008 startete ich bei einem Pharmaunternehmen in Leipzig und seit 2015 bin ich in im Forschungsumfeld beschäftig. Ich persönlich beschäftige mich vor allem mit den Themen Datenintegration, -qualität und -analyse. Das Tolle an meinem Job ist, dass ich immer sehr abwechslungsreiche und verantwortungsvolle Projekte begleiten darf. Im privaten Umfeld beschäftige ich mich gern mit den Themen Fotografie, Flugmodellbau und dem Wassersport. Ich freue mich darauf hier einige interessante Beiträge zu publizieren und überentsprechende Kritiken und Feedback.
Heiko

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.