Inhalt
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?
- Für dieses Beispiel einen Windows-PC
- Software AutoIt für die Automatisierung der Windows Oberfläche
- eine Python-Installation (Version 3.x.x)
- einmal CURL für Python
- einen Account für den Dienst 2captcha.com
- einen instapush.im Account
- etwas Zeit
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: | |
Ergebnis von 2captcha.com: |
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
- Synology: Nextcloud Automatisierung mit cron jobs - 28. Mai 2018
- Synology: Nextcloud und Docker installieren - 24. Mai 2018
- Meteorit über Deutschland - 16. November 2017