ssvih-miaa
Новичок
- Сообщения
- 41
- Репутация
- 0
Версия AutoIt:
Version 3.4.1
Описание:
Пытаюсь обойти капчу
Примечания:
Имею код вида:
После чего получаю ответ от сервера:
+ Ура в БД есть такая запись - ХЕШ=60C9BDE1E89507DBDE38A6947995DB3D Ответ=Гриб
+ Ура в БД есть такая запись - ХЕШ=B00D5917690E875C64B8F5CA0127C990 Ответ=Монета
+ Ура в БД есть такая запись - ХЕШ=82C46D62BB499FD7F97E5B6276867ED7 Ответ=Гриб
+ Ура в БД есть такая запись - ХЕШ=56DD7FDD9EBAF1A8D18BAFB5FC139F61 Ответ=Гриб
+ Ура в БД есть такая запись - ХЕШ=B7FF8D34A9E0F5AA1E9AA36C9EB083B3 Ответ=Гриб
+ Ура в БД есть такая запись - ХЕШ=0FCD1853558EF3ED6EF3206EA1EF2C1C Ответ=Гриб
Нужно реализовать клик по символу МОНЕТА в данном случае, на том символе который всего 1 а не 5
Так же ответ может состоять из всего 3-5 вариантов, в случае если 3 варианта и из них 2 одинаковых а один различный то так же необходимо реализовать клик.
Есть идеи как реализовать логику?
Version 3.4.1
Описание:
Пытаюсь обойти капчу
Примечания:
Имею код вида:
Код:
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <IE.au3>
#include <ScreenCapture.au3>
#include <Crypt.au3>
Local $oIE = _IEAttach("http://rubserf.ru/serfbar.php?act=mend&key=76174 - Internet Explorer")
For $i = 1 To 500 Step 1
WinActivate("http://rubserf.ru/serfbar.php?act=mend&key=76174 - Internet Explorer")
$aPos = WinGetPos("http://rubserf.ru/serfbar.php?act=mend&key=76174 - Internet Explorer")
;~ _ScreenCapture_Capture(@ScriptDir & "\pergunta"&$i&".jpg", $aPos[0]+25, $aPos[1]+89, $aPos[0]+519, $aPos[1]+99)
_ScreenCapture_Capture(@ScriptDir & "\ione"&$i&".jpg", $aPos[0]+32, $aPos[1]+111, $aPos[0]+87, $aPos[1]+166)
_ScreenCapture_Capture(@ScriptDir & "\itwo"&$i&".jpg", $aPos[0]+117, $aPos[1]+111, $aPos[0]+172, $aPos[1]+166)
_ScreenCapture_Capture(@ScriptDir & "\ithree"&$i&".jpg", $aPos[0]+202, $aPos[1]+111, $aPos[0]+257, $aPos[1]+166)
_ScreenCapture_Capture(@ScriptDir & "\ifour"&$i&".jpg", $aPos[0]+287, $aPos[1]+111, $aPos[0]+342, $aPos[1]+166)
_ScreenCapture_Capture(@ScriptDir & "\ifive"&$i&".jpg", $aPos[0]+372, $aPos[1]+111, $aPos[0]+427, $aPos[1]+166)
_ScreenCapture_Capture(@ScriptDir & "\isix"&$i&".jpg", $aPos[0]+457, $aPos[1]+111, $aPos[0]+512, $aPos[1]+166)
_Crypt_Startup()
$ione = "ione"&$i&".jpg"
$ioneHash = _Crypt_HashFile($ione, $CALG_MD5) ; Create a hash of the file.
$itwo = "itwo"&$i&".jpg"
$itwoHash = _Crypt_HashFile($itwo, $CALG_MD5) ; Create a hash of the file.
$ithree = "ithree"&$i&".jpg"
$ithreeHash = _Crypt_HashFile($ithree, $CALG_MD5) ; Create a hash of the file.
$ifour = "ifour"&$i&".jpg"
$ifourHash = _Crypt_HashFile($ifour, $CALG_MD5) ; Create a hash of the file.
$ifive = "ifive"&$i&".jpg"
$ifiveHash = _Crypt_HashFile($ifive, $CALG_MD5) ; Create a hash of the file.
$isix = "isix"&$i&".jpg"
$isixHash = _Crypt_HashFile($isix, $CALG_MD5) ; Create a hash of the file.
;~ MsgBox(0, '', $bHash2)
_Crypt_Shutdown() ; Shutdown the crypt library.
$sPattern = '.*?0x\.*'
$ioneResult = StringRegExpReplace($ioneHash, $sPattern, '\1')
$itwoResult = StringRegExpReplace($itwoHash, $sPattern, '\1')
$ithreeResult = StringRegExpReplace($ithreeHash, $sPattern, '\1')
$ifourResult = StringRegExpReplace($ifourHash, $sPattern, '\1')
$ifiveResult = StringRegExpReplace($ifiveHash, $sPattern, '\1')
$isixResult = StringRegExpReplace($isixHash, $sPattern, '\1')
;~ ConsoleWrite($ioneResult & @CRLF)
;~ ConsoleWrite($itwoResult & @CRLF)
;~ ConsoleWrite($ithreeResult & @CRLF)
;~ ConsoleWrite($ifourResult & @CRLF)
;~ ConsoleWrite($ifiveResult & @CRLF)
;~ ConsoleWrite($isixResult & @CRLF)
;Запрос по первой картинке
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?otvet=" & $ioneResult & "&ind=" & '1')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mioneResult = $oHTTP.ResponseText
If $mioneResult <> '' Then
ConsoleWrite('+ Ура в БД есть такая запись - ХЕШ='& $ioneResult &' Ответ='& $mioneResult & @LF)
Else
$s = _Input("CAPTCHA=" & $ioneResult, $ione)
If $s <> '' Then
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?hash=" & $ioneResult & "&respond=" & $s & '&ind=1')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mioneResult = $oHTTP.ResponseText
ConsoleWrite($s & $ioneResult & @LF)
EndIf
;~ ConsoleWrite($mioneResult & @LF)
EndIf
;Запрос по второй картинке
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?otvet=" & $itwoResult & "&ind=" & '2')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mitwoResult = $oHTTP.ResponseText
If $mitwoResult <> '' Then
ConsoleWrite('+ Ура в БД есть такая запись - ХЕШ='& $itwoResult &' Ответ='& $mitwoResult & @LF)
Else
$s = _Input("CAPTCHA=" & $itwoResult, $itwo)
If $s <> '' Then
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?hash=" & $itwoResult & "&respond=" & $s & '&ind=2')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mitwoResult = $oHTTP.ResponseText
ConsoleWrite($s & $itwoResult & @LF)
EndIf
;~ ConsoleWrite($mioneResult & @LF)
EndIf
;Запрос по третьей картинке
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?otvet=" & $ithreeResult & "&ind=" & '3')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mithreeResult = $oHTTP.ResponseText
If $mithreeResult <> '' Then
ConsoleWrite('+ Ура в БД есть такая запись - ХЕШ='& $ithreeResult &' Ответ='& $mithreeResult & @LF)
Else
$s = _Input("CAPTCHA=" & $ithreeResult, $ithree)
If $s <> '' Then
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?hash=" & $ithreeResult & "&respond=" & $s & '&ind=3')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mithreeResult = $oHTTP.ResponseText
ConsoleWrite($s & $ithreeResult & @LF)
EndIf
;~ ConsoleWrite($mioneResult & @LF)
EndIf
;Запрос по четвертой картинке
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?otvet=" & $ifourResult & "&ind=" & '4')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mifourResult = $oHTTP.ResponseText
If $mifourResult <> '' Then
ConsoleWrite('+ Ура в БД есть такая запись - ХЕШ='& $ifourResult &' Ответ='& $mifourResult & @LF)
Else
$s = _Input("CAPTCHA=" & $ifourResult, $ifour)
If $s <> '' Then
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?hash=" & $ifourResult & "&respond=" & $s & '&ind=4')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mifourResult = $oHTTP.ResponseText
ConsoleWrite($s & $ifourResult & @LF)
EndIf
;~ ConsoleWrite($mioneResult & @LF)
EndIf
;Запрос по пятой картинке
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?otvet=" & $ifiveResult & "&ind=" & '5')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mfiveResult = $oHTTP.ResponseText
If $mfiveResult <> '' Then
ConsoleWrite('+ Ура в БД есть такая запись - ХЕШ='& $ifiveResult &' Ответ='& $mfiveResult & @LF)
Else
$s = _Input("CAPTCHA=" & $ifiveResult, $ifive)
If $s <> '' Then
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?hash=" & $ifiveResult & "&respond=" & $s & '&ind=5')
$oHTTP.Send()
$oHTTP.WaitForResponse
$mfiveResult = $oHTTP.ResponseText
ConsoleWrite($s & $ifiveResult & @LF)
EndIf
;~ ConsoleWrite($mioneResult & @LF)
EndIf
;Запрос по шестой картинке
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?otvet=" & $isixResult & "&ind=" & '6')
$oHTTP.Send()
$oHTTP.WaitForResponse
$misixResult = $oHTTP.ResponseText
If $misixResult <> '' Then
ConsoleWrite('+ Ура в БД есть такая запись - ХЕШ='& $isixResult &' Ответ='& $misixResult & @LF)
Else
$s = _Input("CAPTCHA=" & $isixResult, $isix)
If $s <> '' Then
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://rubserf/index.php?hash=" & $isixResult & "&respond=" & $s & '&ind=6')
$oHTTP.Send()
$oHTTP.WaitForResponse
$misixResult = $oHTTP.ResponseText
ConsoleWrite($s & $isixResult & @LF)
EndIf
EndIf
ConsoleWrite('! Уже посмотрели ' & $i &' раз'& @LF)
Send("{F5}")
_IELoadWait($oIE)
Sleep(1000)
Next
Func Example()
; Copy Au3 files in the temporary directory to a new folder/directory called Au3Files.
FileMove(@ScriptDir & "\*.jpg", @ScriptDir & "\img\", $FC_OVERWRITE + $FC_CREATEPATH)
EndFunc ;==>Example
__captchaClick($mioneResult, $mitwoResult, $mithreeResult, $mifourResult, $mfiveResult, $misixResult)
Func __captchaClick($mioneResult, $mitwoResult, $mithreeResult, $mifourResult, $mfiveResult, $misixResult)
;~ If IsObj $mioneResult Then
;~ $test = $mioneResult
;~ If IsObj $mitwoResult Then
;~ $R = StringRegExp($mitwoResult, $test, 0)
;~ EndIf
EndFunc
Func _Input($Title, $img)
Local $GUI = GUICreate($Title, 470, 600)
Local $idPic = GUICtrlCreatePic($img, 50, 50, 56, 56)
Local $BtnBanans = GUICtrlCreateButton("Банан", 10, 265, 00, -1, 0x01)
;~ Local $Input = GUICtrlCreateInput($is, 50, 30, 90, 20)
Local $BtnGuitars = GUICtrlCreateButton("Гитара", 10, 295, 00, -1, 0x01)
;~ Local $Btnitwo = GUICtrlCreateInput("", 112, 30, 40, 20)
Local $BtnGrib = GUICtrlCreateButton("Гриб", 10, 325, 00, -1, 0x01)
;~ Local $Btnithree = GUICtrlCreateInput("", 174, 30, 40, 20)
Local $BtnCats = GUICtrlCreateButton("Кошка", 10, 355, 00, -1, 0x01)
;~ Local $Btnifour = GUICtrlCreateInput("", 236, 30, 40, 20)
Local $BtnCars = GUICtrlCreateButton("Машина", 10, 385, 00, -1, 0x01)
;~ Local $Btnifive = GUICtrlCreateInput("", 298, 30, 40, 20)
Local $BtnMoneus = GUICtrlCreateButton("Монета", 10, 415, 00, -1, 0x01)
;~ Local $Btnisix = GUICtrlCreateInput("", 360, 30, 40, 20)
Local $BtnBols = GUICtrlCreateButton("Мяч", 10, 445, 00, -1, 0x01)
Local $BtnOgyrci = GUICtrlCreateButton("Огурец", 100, 265, 00, -1, 0x01)
Local $BtnPeixes = GUICtrlCreateButton("Рыба", 100, 295, 00, -1, 0x01)
Local $BtnAviois = GUICtrlCreateButton("Самолет", 100, 325, 00, -1, 0x01)
Local $BtnDogs = GUICtrlCreateButton("Собака", 100, 355, 00, -1, 0x01)
Local $BtnFlors = GUICtrlCreateButton("Цветок", 100, 385, 00, -1, 0x01)
Local $BtnRelogios = GUICtrlCreateButton("Часы", 100, 415, 00, -1, 0x01)
Local $BtnMasas = GUICtrlCreateButton("Яблоко", 100, 445, 00, -1, 0x01)
Local $BtnOK = GUICtrlCreateButton("ОК", 10, 565, 00, -1, 0x01) ; $BS_DEFPUSHBUTTON
Local $BtnCancel = GUICtrlCreateButton("CANCEL", 150, 265, 100)
GUISetState()
Do
Switch GUIGetMsg()
Case $BtnCancel
Return SetError(1, GUIDelete($GUI), "")
Case $BtnOK
Local $Text = GUICtrlRead($Input)
Return SetError(0, GUIDelete($GUI), $Text)
Case $BtnBanans
Return SetError(0, GUIDelete($GUI), 'Банан')
Case $BtnGuitars
Return SetError(0, GUIDelete($GUI), 'Гитара')
Case $BtnGrib
Return SetError(0, GUIDelete($GUI), 'Гриб')
Case $BtnCats
Return SetError(0, GUIDelete($GUI), 'Кошка')
Case $BtnCars
Return SetError(0, GUIDelete($GUI), 'Машина')
Case $BtnMoneus
Return SetError(0, GUIDelete($GUI), 'Монета')
Case $BtnBols
Return SetError(0, GUIDelete($GUI), 'Мяч')
Case $BtnOgyrci
Return SetError(0, GUIDelete($GUI), 'Огурец')
Case $BtnPeixes
Return SetError(0, GUIDelete($GUI), 'Рыба')
Case $BtnAviois
Return SetError(0, GUIDelete($GUI), 'Самолет')
Case $BtnDogs
Return SetError(0, GUIDelete($GUI), 'Собака')
Case $BtnFlors
Return SetError(0, GUIDelete($GUI), 'Цветок')
Case $BtnRelogios
Return SetError(0, GUIDelete($GUI), 'Часы')
Case $BtnMasas
Return SetError(0, GUIDelete($GUI), 'Яблоко')
EndSwitch
Until 0
EndFunc
После чего получаю ответ от сервера:
+ Ура в БД есть такая запись - ХЕШ=60C9BDE1E89507DBDE38A6947995DB3D Ответ=Гриб
+ Ура в БД есть такая запись - ХЕШ=B00D5917690E875C64B8F5CA0127C990 Ответ=Монета
+ Ура в БД есть такая запись - ХЕШ=82C46D62BB499FD7F97E5B6276867ED7 Ответ=Гриб
+ Ура в БД есть такая запись - ХЕШ=56DD7FDD9EBAF1A8D18BAFB5FC139F61 Ответ=Гриб
+ Ура в БД есть такая запись - ХЕШ=B7FF8D34A9E0F5AA1E9AA36C9EB083B3 Ответ=Гриб
+ Ура в БД есть такая запись - ХЕШ=0FCD1853558EF3ED6EF3206EA1EF2C1C Ответ=Гриб
Нужно реализовать клик по символу МОНЕТА в данном случае, на том символе который всего 1 а не 5
Так же ответ может состоять из всего 3-5 вариантов, в случае если 3 варианта и из них 2 одинаковых а один различный то так же необходимо реализовать клик.
Есть идеи как реализовать логику?