Что нового

[Сеть, интернет] получение капчи с вэбстраницы на 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


		$kol=@extended

		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
Репутация
626
Предупреждение coldmine
Код заключаем в соответствующий тэг [autoit][/autoit]
 

Garrett

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

Код:
#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,322
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
Репутация
967
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,322
Garrett
Вы меня не поняли. Капчу мы получаем правильную, но только для первый раз открытого окна _IENavigate($oIE,"http://wmmail.ru/index.php?cf=reg-newr"). Что теперь с ней делать дальше, какие должны быть действия?
Код:
;...
Case $Button1
	; здесь что делать?
;...
 

Garrett

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

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

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

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
У меня капчу так сохраняет, но, 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
Репутация
967
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
Репутация
967
timsky [?]
Ну конкретно в этом случае сайт просто так капчу не отдает и если ее дергать InetGet, то выдается херня
;)

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

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

timsky

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

Garrett

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

timsky

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
timsky [?]
Это 100% рабочий способ.

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

timsky

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

Garrett

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

vcomp71

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