Что нового

[Сеть, интернет] получение капчи с вэбстраницы на GUI окно

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Vlasssov
madmasles, предлагал именно такой вариант
 
Автор
C

coldmine

Новичок
Сообщения
19
Репутация
1
Garret
Ваш вариант неплохой и капча появляется в нашем окне, но вот правда как ее отправить назад? Ведь страничка регистрации уже закрыта и при повторном открытии какпча другая. Вариант с принтскрином наверное может быть более рабочим, но надо привязывать на каждом компьютере заново. или нет? в обшем остановился вот на таком варианте
Код:
#include <IE.au3>
#Include <File.au3>
#include <INet.au3>
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 617, 800, 192, 114)
$oIE = ObjCreate("Shell.Explorer.2")
$GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 615, 760)
$Button1 = GUICtrlCreateButton("Отправить", 360, 768, 75, 25, 0, $BS_DEFPUSHBUTTON)
$Input1 = GUICtrlCreateInput("", 225, 770, 121, 21)

GUISetState(@SW_SHOW)



_IENavigate($oIE,"http://wmmail.ru/index.php?cf=reg-newr")
If @error Then Exit 
_IELoadWait ($oIE)  
If @error Then Exit
    
    $oForm = _IEFormGetCollection ($oIE, 1)
	$oCap   = _IEFormElementGetObjByName($oForm,"pnum")

  

ControlClick("Form1", "", 5)



While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
    			$Cap=GUICtrlRead(5)
        		_IEFormElementSetValue($oCap, $Cap)
    EndSwitch
WEnd
Next
 

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Garrett сказал(а):
Vlasssov
madmasles, предлагал именно такой вариант
:'( Ну да... А если сохранить страницу с картинками? Я во пробовал сохранять, так там капча сохраняется с именем captcha.php... Оттуда и берем...
 
Автор
C

coldmine

Новичок
Сообщения
19
Репутация
1
страница то сохраняется и капча вместе с ней, да только капча не та что надо, а уже совсем другая, так что этот вариант не пройдет, остается вариант с редактированием снимка экрана, буду пробовать
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
coldmine
Зачем вам одна captcha в GUI? Стоит ли всё это делать, если легче зайти на сайт и зарегистрироваться? В чём суть выдёргивание captch?
Я бы понял вашу автоматизацию, ели бы вам нужно было постоянно вводить captch при входе на account! Но при регистрации, единожды…?
Опишите, пожалуйста, всю задачу автоматизации! Я постараюсь вам помочь.
 
Автор
C

coldmine

Новичок
Сообщения
19
Репутация
1
Garrett,
если про этот пост, то цель моей автоматизации в организации авторегистраций на сайтах, где есь капча (в идеале без открытия странички в ие). я занимаюсь накруткой на рускких, немецких, и американских буксах и почтовиках. в основном там требуется пдтверждать просмотры и прочтения писем путем ввода капчи, либо выбора правильной картинки и тп., на зарубежных платят просто за регистрации. так почему бы не авоматизировать этот процесс например для 300 логинов? Хотелось бы также узнать алгоритм смены IP адреса в ADSL подключении. с помощью telnet я это делать же умею. но медленно блин. хотя это тема для отдельного поста
 

vcomp71

Осваивающий
Сообщения
431
Репутация
25
coldmine сказал(а):
страница то сохраняется и капча вместе с ней, да только капча не та что надо, а уже совсем другая, так что этот вариант не пройдет, остается вариант с редактированием снимка экрана, буду пробовать
Почему так? При загрузке страницы, она переносится на клиентскую машину в любом случае... Или таи java какая-нибудь? :shok: Вот вы открыли страницу, вот появилась капча, вот вы сохранили страницу - капча поменялась? Мне этот вопрос интересен потому, что создатели сайта в Контакте, постоянно выводят капчу при приглашении кого-то на встречу, приходиться вручную фигачить... Вот поэтому и спрашиваю...
 

bulldog5293

Знающий
Сообщения
172
Репутация
10
капча полюбому поминяется, ведь ту что ты сохраняеш она у тебя на кампьютере, а когда на сервак идёш у них там другая
 
Автор
C

coldmine

Новичок
Сообщения
19
Репутация
1
Vlasssov,
Вот вы открыли страницу, вот появилась капча, вот вы сохранили страницу - капча поменялась? Именно так. Открытую страницу не закрываю, сохраняю на винт. Открываю схраненную "копию" - капча другая. файл капчи index.png
 

bulldog5293

Знающий
Сообщения
172
Репутация
10
Тебе всё равно на прямую нада будет обращаться и к капче и к странице, ссыль времини нету искать, но где то такая тема обсуждалась.
Вот попробуй так
Код:
#include <IE.au3>
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
Opt('MustDeclareVars', 1)
Global $sURL, $oIE, $oImgs
$oIE = _IECreate("http://www.safonbux-msk.ru/loginn.php?r=", 0, 0)
$oImgs = _IEImgGetCollection($oIE)
For $oImg In $oImgs
	If StringInStr($oImg.src, "image.php?") Then
		$sURL = $oImg.src
		ExitLoop
	EndIf
Next
If InetGet($sURL, "c:\Captcha.gif", 1) Then MsgBox(64, "Message", "Image downloading successful")
_Main()

Func _Main()
	Local $hGUI1, $hImage, $hGraphic1
	$hGUI1 = GUICreate("Zoomed", 130, 50, 500, 300)
	GUISetState()
	_GDIPlus_Startup()
	$hImage = _GDIPlus_ImageLoadFromFile("c:\Captcha.gif")
	$hGraphic1 = _GDIPlus_GraphicsCreateFromHWND($hGUI1)
	_GDIPlus_GraphicsDrawImageRectRect($hGraphic1, $hImage, 0, 0, 400, 400, 1, 1, 400, 300)
	_GDIPlus_GraphicsDispose($hGraphic1)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()

	Do
	Until GUIGetMsg() = $GUI_EVENT_CLOSE


EndFunc   ;==>_Main
_IEQuit($oIE)
 

Scarabay

Новичок
Сообщения
10
Репутация
0
Garrett сказал(а):
Где-то так:

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

#Region ### START Koda GUI section ### Form=

$Form1 = GUICreate("Form1", 217, 140, 192, 114)
$oIE = ObjCreate("Shell.Explorer.2")
$GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 215, 100)
$Button1 = GUICtrlCreateButton("Отправить", 132, 108, 75, 25, 0)
$Input1 = GUICtrlCreateInput("", 6, 110, 121, 21)

GUISetState(@SW_HIDE)

#EndRegion ### END Koda GUI section ###

TrayTip("Внимание!","Загружаемся...",1)

_IENavigate($oIE,"http://wmmail.ru/index.php?cf=reg-newr")
If @error Then Exit	
_IELoadWait ($oIE)	
If @error Then Exit
	
	$oForm = _IEFormGetObjByName ($oIE, "reg")
	$oInputs = _IETagNameGetCollection ($oForm, "img")

	For $oInput In $oInputs
		$sCapcha = $oInput.src
	Next

_IENavigate($oIE,$sCapcha)	
_IELoadWait ($oIE)
If @error Then Exit
	
	TrayTip("","",1)	
	GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
	Case $GUI_EVENT_CLOSE
			Exit
		Case $nMsg = $Button1
		;~ ....
	EndSwitch
WEnd
Подскажите пожалуйста, почему этот кусок кода не подходит? :wacko:
 

BIOS

Жизнь - игра. График - супер, но сюжет - хреновый.
Сообщения
173
Репутация
69
Чтоб каптча хваталась правильно
Код:
$o=_IEDocGetObj($oIE)
InetGet($url&'?'&$o.cookie,$file,1)
 

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Я тут проводя эксперименты обнаружил интересную особенность. Дело в том, что Explorer при сохранении страницы с картинками капчу не сохраняет, а вот Firefox - сохраняет. Но если навести на капчу курсор, то есть пункт меню "Сохранить картинку как...". Так вот нельзя ли как-то обнаружить данный объект на листе по некоторым признакам и сохранить картинку как?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Я нашёл таки решение! :smile:
Пример не идеален, в нём есть некоторые нерешенные моменты, к примеру Refresh и .т.д. Однако при большом желании это всё решаемо.
Основная же задача coldmine [?]
Как мне получить капчу с этой страницы на свое окно посредством автоит-скрипта?
думаю решена.

Вот вполне рабочий скрипт:
Код:
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <GDIPlus.au3>

Global $oForm

_GDIPlus_Startup ()

;~ START GUI
$Form1 = GUICreate("WMmail.ru", 273, 225, 192, 114)
$InputPnum = GUICtrlCreateInput("", 126, 190, 61, 21)
$BottonSend = GUICtrlCreateButton("Отправить", 192, 190, 75, 21, 0)
$oIE = ObjCreate("Shell.Explorer.2")
GUICtrlCreateObj($oIE, 6, 6, 260, 167)
GUISetState(@SW_SHOW)
;~ END GUI

TrayTip("Внимание!","Загружаемся...",1)
_IENavigate($oIE,"http://wmmail.ru/index.php?cf=reg-newr")
_LoadCaptcha()
TrayTip("","",1) 

While 1
	$nMsg = GUIGetMsg()
	_ShowCaptcha()
    Select
		Case $nMsg = $GUI_EVENT_CLOSE
			_GDIPlus_ShutDown ()
            Exit
        Case $nMsg = $BottonSend
			_Submit()
    EndSelect
WEnd

Func _LoadCaptcha() ; Загружаем и сохраняем картинку 
	$oForm = _IEFormGetObjByName ($oIE, "reg")
	$oInputs = _IETagNameGetCollection ($oForm, "img")
	$oFocus = _IEFormElementGetObjByName($oForm, "nwlogin")
	_IEAction($oFocus,"Focus")

	For $oInput In $oInputs
		$oInput.src
	Next
	
	InetGet($oInput.src, @ScriptDir &"\captcha.bmp",1) 
	_ShowCaptcha()	
EndFunc

Func _ShowCaptcha() ; Показываем картинку в GUI
    $hBitmap = _GDIPlus_BitmapCreateFromFile (@ScriptDir & "\captcha.bmp")
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($Form1)
    _GDIPlus_GraphicsDrawImage ($hGraphic, $hBitmap, 6, 180)
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_BitmapDispose ($hBitmap)
	Sleep(20)
EndFunc

Func _Submit() ; Отправляем данные
	Local $sNW_login, $sNW_pass, $sNW_pass1, $sNW_email, _
	$sNW_wmi, $sNW_wmz, $sNW_ref, $sNW_chk, $sNW_pnum
	
	$sNW_login = _IEFormElementGetObjByName($oForm, "nwlogin")  ; Логин
		_IEFormElementSetValue($sNW_login, "Tim")
	$sNW_pass = _IEFormElementGetObjByName($oForm, "nwpass") ; Пароль
		_IEFormElementSetValue($sNW_pass, "1234567")
	$sNW_pass1 = _IEFormElementGetObjByName($oForm, "nwpass1") ; Повтор пароля
		_IEFormElementSetValue($sNW_pass1, "1234567")
	$sNW_email = _IEFormElementGetObjByName($oForm, "nwemail") ; Почта
		_IEFormElementSetValue($sNW_email, "[email protected]")
	$sNW_wmi = _IEFormElementGetObjByName($oForm, "nwwmi") ; WMI
		_IEFormElementSetValue($sNW_wmi, "")
	$sNW_wmz = _IEFormElementGetObjByName($oForm, "nwwmz") ; WMZ
		_IEFormElementSetValue($sNW_wmz, "")
	$sNW_ref = _IEFormElementGetObjByName($oForm, "nwref") ; Referrer
		_IEFormElementSetValue($sNW_ref, "")
	$sNW_chk = _IEFormElementGetObjByName($oForm, "nwchk") ; Правила
		_IEFormElementSetValue($sNW_chk, "1")
	$sNW_pnum = _IEFormElementGetObjByName($oForm, "pnum") ; Число с картинки
		_IEFormElementSetValue($sNW_pnum, GUICtrlRead($InputPnum))	
	_IEFormSubmit($oForm)
	_IELoadWait ($oIE)
	_Start()
EndFunc
 

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Я вот только не понял, а вот эта конструкция зачем
$oForm = _IEFormGetObjByName ($oIE, "reg")
$oInputs = _IETagNameGetCollection ($oForm, "img")
$oFocus = _IEFormElementGetObjByName($oForm, "nwlogin")
_IEAction($oFocus,"Focus")

For $oInput In $oInputs
$oInput.src
Next


InetGet($oInput.src, @ScriptDir &"\captcha.bmp",1)
_ShowCaptcha()
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Vlasssov
Она загружает картинку с цифрами, к вам на диск, каждый раз, когда вы обращаетесь к странице.
---
Если вас эти строки ввели в заблуждение, так это просто для удобства, чтобы при сравнении картинок не прокручивать каждый раз страницу. Это ведь тестовый пример, заготовка! Меняйте его под свои задачи.
Код:
$oFocus = _IEFormElementGetObjByName($oForm, "nwlogin")
_IEAction($oFocus,"Focus")
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
madmasles
Спасибо!
 
Верх