Что нового

[Сеть, интернет] Авторизация на сайт через _IECreateEmbedded с ввод капча

Сообщения
32
Репутация
1
Как войти на сайт при заполнение всех полей HTML через GUI и ввод капч
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <GDIPlus.au3>
#include <Clipboard.au3>

Local $oIE = _IECreateEmbedded()
GUICreate("Embedded Web control Test", 800, 580, (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
GUICtrlCreateObj($oIE, 10, 40, 600, 360)
$I_Login = GUICtrlCreateInput("Логин", 620, 40, 150, 20)
$I_Password = GUICtrlCreateInput("Пароль", 620, 70, 150, 20)
$B_Submit = GUICtrlCreateButton("Log In", 620, 100, 150, 20)
$I_Captcha = GUICtrlCreateInput("Капча", 620, 130, 150, 20)
;~ $Captcha = GUICtrlCreatePic("", 620, 160)
;~ GUICtrlSetBkColor(-1, 0xffffff)

GUISetState(@SW_SHOW) ;Show GUI

_IENavigate($oIE, "http://richrancho.net")

$oImgs = _IEImgGetCollection($oIE)

   For $oImg In $oImgs
      If StringInStr($oImg.src, "code.php") Then
      $oCtlRange = $oImg.document.body.createControlRange()
      $oCtlRange.addElement($oImg)
	  $oCtlRange.select($oImg)
      $oCtlRange.execCommand('Copy')
      _ClipBoard_Open(0)
      $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
      _ClipBoard_Close()
      _GDIPlus_Startup()
      $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
      _GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\" & "captcha.jpg")
      _GDIPlus_BitmapDispose($hImage)
      _GDIPlus_Shutdown()
      EndIf
   Next
; Тут надо показать капчу на GUI

While 1
    Local $iMsg = GUIGetMsg()
    Select
        Case $iMsg = $GUI_EVENT_CLOSE
            ExitLoop
		 Case $iMsg = $B_Submit
			$oLogin = _IEGetObjById($oIE, 'inputloginnew')
			$oPass = _IEGetObjById($oIE, 'inputpassnew')
			$oCaptcha = _IEGetObjById($oIE, 'codnew')
			_IEFormElementSetValue($oLogin, GUICtrlRead($I_Login))
			_IEFormElementSetValue($oPass, GUICtrlRead($I_Password))
			_IEFormElementSetValue($oCaptcha, GUICtrlRead($I_Captcha))
; Здесь команда показать в GUI окно
    EndSelect
WEnd

GUIDelete()

Exit


Вот в этой скрипт всё работает прямой через Internet explore (скачивает капчу на диск) но через Embded неработает :scratch:
Код:
#include <IE.au3>
#include <GDIPlus.au3>
#include <Clipboard.au3>


; Пример 2 - Открывает страницу AutoIt, получает коллекцию Img
;               и для каждого отображает src URL

$oIE = _IECreate("http://richrancho.net/")
$oImgs = _IEImgGetCollection($oIE)

   For $oImg In $oImgs
      If StringInStr($oImg.src, "code.php") Then
      $oCtlRange = $oImg.document.body.createControlRange()
      $oCtlRange.addElement($oImg)
      $oCtlRange.execCommand('Copy', False)
      _ClipBoard_Open(0)
      $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
      _ClipBoard_Close()
      _GDIPlus_Startup()
      $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
      _GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\" & "captcha.jpg")
      _GDIPlus_BitmapDispose($hImage)
      _GDIPlus_Shutdown()
      EndIf
   Next
MsgBox(64,'','Выход ?')

ЗАРАНЕЕ СПАСИБО ТОТ КТО ПОМОЖЕТ !!! :beer:
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Ребят, зачем вы себе создаёте головную боль?!!!
Ну да ладно, ваше право :smile:

Вот тема, где я уже приводил пример.

Вам просто нужно этот код (так как у вас картинка png.):
Код:
;...
$hFile = FileOpen(@ScriptDir & "\captcha.jpg", 18)
FileWrite($hFile, $oHTTP.ResponseBody)
FileClose($hFile)

#Region Form
$Form1 = GUICreate("1", 136, 160, -1, -1)
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\captcha.jpg", 8, 8, 120, 72)
$Button1 = GUICtrlCreateButton("Send", 31, 122, 75, 25)
$Input1 = GUICtrlCreateInput("", 8, 88, 121, 21)
GUISetState(@SW_SHOW)
#EndRegion Form

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            $sKeystring = GUICtrlRead($Input1)
            ExitLoop
    EndSwitch
 WEnd

GUIDelete($Form1)
;...

сменить на этот код:
Код:
#Include <GDIPlus.au3>
;....
$hFile = FileOpen(@ScriptDir & "\captcha.png", 18)
FileWrite($hFile, $oHTTP.ResponseBody)
FileClose($hFile)

_GDIPlus_StartUp()
$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\captcha.png")

#Region Form
$Form1 = GUICreate("1", 136, 160, -1, -1)
$Button1 = GUICtrlCreateButton("Send", 31, 122, 75, 25)
$Input1 = GUICtrlCreateInput("", 8, 88, 121, 21)
GUISetState(@SW_SHOW)
#EndRegion Form

$hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form1)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 35, 30)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$sKeystring = GUICtrlRead($Input1)
			_GDIPlus_GraphicsDispose($hGraphic)
			_GDIPlus_ImageDispose($hImage)
			_GDIPlus_ShutDown()
			ExitLoop
	EndSwitch
 WEnd

GUIDelete($Form1)
;...

Так же естественно, нужно будет поменять параметры запросов.
 
Автор
Se7enstars
Сообщения
32
Репутация
1
Вы не поняли, вот когда копирую капчу через эту функцию, он не копируется
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <GDIPlus.au3>
#include <Clipboard.au3>

Local $oIE = _IECreateEmbedded()
GUICreate("Embedded Web control Test", 800, 580, (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
GUICtrlCreateObj($oIE, 10, 40, 600, 360)
$I_Login = GUICtrlCreateInput("Логин", 620, 40, 150, 20)
$I_Password = GUICtrlCreateInput("Пароль", 620, 70, 150, 20)
$B_Submit = GUICtrlCreateButton("Log In", 620, 100, 150, 20)
$I_Captcha = GUICtrlCreateInput("Капча", 620, 130, 150, 20)
;~ $Captcha = GUICtrlCreatePic("", 620, 160)
;~ GUICtrlSetBkColor(-1, 0xffffff)

GUISetState(@SW_SHOW) ;Show GUI

_IENavigate($oIE, "http://richrancho.net")

$oImgs = _IEImgGetCollection($oIE)

   For $oImg In $oImgs
      If StringInStr($oImg.src, "code.php") Then
      $oCtlRange = $oImg.document.body.createControlRange()
      $oCtlRange.addElement($oImg)
      $oCtlRange.select($oImg)
      $oCtlRange.execCommand('Copy')
      _ClipBoard_Open(0)
      $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
      _ClipBoard_Close()
      _GDIPlus_Startup()
      $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
      _GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\" & "captcha.jpg")
      _GDIPlus_BitmapDispose($hImage)
      _GDIPlus_Shutdown()
      EndIf
   Next
; Тут надо показать капчу на GUI

While 1
    Local $iMsg = GUIGetMsg()
    Select
        Case $iMsg = $GUI_EVENT_CLOSE
            ExitLoop
         Case $iMsg = $B_Submit
            $oLogin = _IEGetObjById($oIE, 'inputloginnew')
            $oPass = _IEGetObjById($oIE, 'inputpassnew')
            $oCaptcha = _IEGetObjById($oIE, 'codnew')
            _IEFormElementSetValue($oLogin, GUICtrlRead($I_Login))
            _IEFormElementSetValue($oPass, GUICtrlRead($I_Password))
            _IEFormElementSetValue($oCaptcha, GUICtrlRead($I_Captcha))
; Здесь команда показать в GUI окно
    EndSelect
WEnd

GUIDelete()

Exit

но в этом случай все работает
Код:
#include <IE.au3>
#include <GDIPlus.au3>
#include <Clipboard.au3>


; Пример 2 - Открывает страницу AutoIt, получает коллекцию Img
;               и для каждого отображает src URL

$oIE = _IECreate("http://richrancho.net/")
$oImgs = _IEImgGetCollection($oIE)

   For $oImg In $oImgs
      If StringInStr($oImg.src, "code.php") Then
      $oCtlRange = $oImg.document.body.createControlRange()
      $oCtlRange.addElement($oImg)
      $oCtlRange.execCommand('Copy', False)
      _ClipBoard_Open(0)
      $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
      _ClipBoard_Close()
      _GDIPlus_Startup()
      $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
      _GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\" & "captcha.jpg")
      _GDIPlus_BitmapDispose($hImage)
      _GDIPlus_Shutdown()
      EndIf
   Next
MsgBox(64,'','Выход ?')

Разница: В первая функция скрипт работает через _IECreateEmbedded()
А вторая прямой: _IECreate()
 
Верх