Что нового

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

coldmine

Новичок
Сообщения
19
Репутация
1
Всем привет. Помогите решить проблемку. Есть скрипт по авторегистрации на сайте, например, wmmail.ru. Ссылка на страницу регистрации вот http://wmmail.ru/index.php?cf=reg-newr. Как мне получить капчу с этой страницы на свое окно посредством автоит-скрипта? кусок кода ниже
Код:
#include <IE.au3>
#include <GUIConstants.au3>
#Include <File.au3>
#include <INet.au3>
#include <Array.au3>
		$oIE = _IECreate ("http://wmmail.ru/")
		
		_IELinkClickByText($oIE, "Регистрация")
		_IELoadWait($oIE)

$oImgs = _IEImgGetCollection ($oIE)
$iNumImg = @extended


		[email protected]

		Dim $oArray[$kol]
		$oArray[0]=0
		$i = 1
		While $i <= $kol
		For $oImg In $oImgs
		_ArrayInsert ( $oArray, $i, $oImg.src )
	    $i = $i + 1
		Next
	WEnd
	
 	$num=$kol-11
	



GUICreate("Ввод капчи", 140, 140)

	
InetGet ( $oArray[$num]&".bmp", "F:\captha.bmp",1,1 )

		
GUICtrlCreatePic("F:\captha.bmp",12,12, 115,40)

GUICtrlCreateLabel("Ввод капчи", 40, 60)
GUICtrlCreateInput("", 38, 78)

$butt_1=GUICtrlCreateButton( "Ввел!", 20, 110, 100, 20)
GUISetState(@SW_SHOW)

While 1
   $msg = GUIGetMsg()
   Select
       Case $msg = $GUI_EVENT_CLOSE
		Exit
      Case $msg = $GUI_EVENT_MINIMIZE
   
      Case $msg = $butt_1
Exit

EndSelect
Wend


Exit
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Предупреждение coldmine
Код заключаем в соответствующий тэг [autoit][/autoit]
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Где-то так:

Код:
#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
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Garrett
К сожалению, Вашим способом не получается. То есть, выводится окно с капчей, но, капча при каждом открытии http://wmmail.ru/index.php?cf=reg-newr меняется. Если после
Код:
;...
_IENavigate($oIE,$sCapcha)

вернуться обратно
Код:
;...
_IENavigate($oIE,"http://wmmail.ru/index.php?cf=reg-newr")
то капча будет уже другая и весь смысл ее получения теряется.
Попробовал так
Код:
_IEAction ($oIE, "back")
Все равно капча изменяется.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
madmasles
Нет, нет! Всё правильно :smile:
Она и на то капча чтобы боты не могли её вычислить. Дело в том, что при каждом обновление страницы капча будет меняться.
Для того чтобы убедиться, в правильности капчи поставьте Sleep вот тут:
Код:
;...
Sleep(8000)
_IENavigate($oIE,$sCapcha)	
;...

Вы успеете посмотреть на капчу и убедитесь, что во второй загрузке она не изменится.
Здесь всё дело в PHP (он формирует капчу при помощи GD), и в cookies которые вам передаются.
Если, к примеру, вы загрузите вот этот адрес в браузер,
Код:
http://wmmail.ru/index.php?cf=reg-lostpassnum&rnd=1269396.6293706
то получите в ответ одни полоски :smile: Дело в том, что в этом случае вы не передадите cookies, и PHP скрипт не сформирует для вас картинку.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Garrett
Вы меня не поняли. Капчу мы получаем правильную, но только для первый раз открытого окна _IENavigate($oIE,"http://wmmail.ru/index.php?cf=reg-newr"). Что теперь с ней делать дальше, какие должны быть действия?
Код:
;...
Case $Button1
	; здесь что делать?
;...
 

Garrett

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

А по сути, cookies и ссылка у нас есть, остаётся собрать все данные (pass, login и т.д.) и отослать на страницу регистрации.

P.S. Хотя, вы меня заставили задуматься. Я понял ход ваших мыслей! Сейчас покумекаем :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
У меня капчу так сохраняет, но, 99,99%, это только у меня на маленьком экране ноутбука:
Код:
#include <IE.au3>
#include <ScreenCapture.au3>

Opt("PixelCoordMode", 0)

$oIE = _IECreate ("http://wmmail.ru/index.php?cf=reg-newr")
WinSetState ("[Class:IEFrame]", "", @SW_MAXIMIZE)
MouseMove(@DesktopWidth / 2, @DesktopHeight / 2)
MouseWheel("down", 5)
_ScreenCapture_Capture(@DesktopDir & "\captcha.jpg", 230, 477, 330, 515)
WinSetState ("[Class:IEFrame]", "", @SW_MINIMIZE)
Как привязаться к этой капче в относительных координатах, я не знаю.
 

timsky

Осваивающий
Сообщения
93
Репутация
28
madmasles
Я для капч делаю так: гружу страницу без картинок и дергаю капчу InetGet().
Т.о. мы капчу дергаем всего один раз, как раз подходит для нашей сессии.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
timsky сказал(а):
madmasles
Я для капч делаю так: гружу страницу без картинок и дергаю капчу InetGet().
Т.о. мы капчу дергаем всего один раз, как раз подходит для нашей сессии.
Поделитесь примером, пожалуйста!
 

timsky

Осваивающий
Сообщения
93
Репутация
28
Вот функции для включения/выключения картинок и прочего в ИЕ:

Код:
_ShowPics()
 Func _NoPics()
	RegWrite('HKCU\Software\Microsoft\Internet Explorer\Main', 'Display Inline Images', 'REG_SZ', 'no')
	RegWrite('HKCU\Software\Microsoft\Internet Explorer\Main', 'Play_Animations', 'REG_SZ', 'no')
	RegWrite('HKCU\Software\Microsoft\Internet Explorer\Main', 'Display Inline Videos', 'REG_SZ', 'no')
	RegWrite('HKCU\Software\Microsoft\Internet Explorer\Main', 'Play_Background_Sounds', 'REG_SZ', 'no')
EndFunc   ;==>_NoPics

Func _ShowPics()
	RegWrite('HKCU\Software\Microsoft\Internet Explorer\Main', 'Display Inline Images', 'REG_SZ', 'yes')
	RegWrite('HKCU\Software\Microsoft\Internet Explorer\Main', 'Play_Animations', 'REG_SZ', 'yes')
	RegWrite('HKCU\Software\Microsoft\Internet Explorer\Main', 'Display Inline Videos', 'REG_SZ', 'yes')
	RegWrite('HKCU\Software\Microsoft\Internet Explorer\Main', 'Play_Background_Sounds', 'REG_SZ', 'yes')
EndFunc   ;==>_ShowPics


Ну конкретно в этом случае сайт просто так капчу не отдает и если ее дергать InetGet, то выдается херня, а если открыть в том же ИЕ, то капча. Тут нужно ковырять... скорее всего куки.

Для таких тяжелых случаев есть еще круче способ: сперва выичщаешь весь кеш ИЕ, грузишь страницу (с отключенными картинками), грузишь капчу в новом окне (_IECreate) и потом шерстишь по кешу в поисках картинки.

Я так выдирал обложки с одного замороченного сайта, который отдавал контент тока броузеру ;D
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
timsky [?]
Ну конкретно в этом случае сайт просто так капчу не отдает и если ее дергать InetGet, то выдается херня
;)

Тут нужно ковырять... скорее всего куки.
Там ничего нет! Иначе в капче нет смысла! :smile:

Для таких тяжелых случаев есть еще круче способ: сперва выичщаешь весь кеш ИЕ, грузишь страницу (с отключенными картинками), грузишь капчу в новом окне (_IECreate) и потом шерстишь по кешу в поисках картинки.
К сожалению, тоже глухой номер! Капча формируется динамически PHP на стороне сервера.
 

timsky

Осваивающий
Сообщения
93
Репутация
28
Garrett [?]
К сожалению, тоже глухой номер! Капча формируется динамически PHP на стороне сервера.
Это я тоже прекрасно знаю. На то она и капча.
И с чего ты взял, что глухой номер? Пробовал? Нет.
Это 100% рабочий способ.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
timsky [?]
И с чего ты взял, что глухой номер? Пробовал? Нет.Это 100% рабочий способ.
А вы пробовали?!
Капча в данном случае не картинка!
 

timsky

Осваивающий
Сообщения
93
Репутация
28
Garrett [?]
А вы пробовали?!
Капча в данном случае не картинка!
Ты сам понял, что написал?
Не важно, какой "файл" генерит капчу, важно, что броузеру отдается картика - двоичные данные в формате PNG.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
timsky [?]
Это 100% рабочий способ.
timsky [?]
Ты сам понял, что написал?Не важно, какой "файл" генерит капчу, важно, что броузеру отдается картика - двоичные данные в формате PNG.
В отличие от вас я предложил свой вариант, и он рабочий!
Рабочий пример получения капчи вашим 100% способом приведите, пожалуйста! Чтобы у нас получился предметный разговор.
 

timsky

Осваивающий
Сообщения
93
Репутация
28
Garrett [?]
Рабочий пример получения капчи вашим 100% способом приведите, пожалуйста! Чтобы у нас получился предметный разговор.
Я сюда не доказывать что-то пришел. Рабочий пример можешь сам сделать, я схему описал и она предельно проста.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
timsky [?]
Я сюда не доказывать что-то пришел. Рабочий пример можешь сам сделать, я схему описал и она предельно проста.
Всё что и следовало ожидать! ;D
 

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Извините, что вмешиваюсь в столь интеллигентную беседу... А никто не пробовал просто кусок экрана ловить? Например через принт скрин? Понятно, тогда окно браузера надо выводить как visible
 
Верх