Войти

Показать полную графическую версию : [решено] Сохранение изображения(captcha)


aesir
01-05-2009, 16:36
Всем привет! Подскажите можно ли как-нить сохранить, или напрямую отобразить картинку со страници, только это не обычная картинка а код(на сайте, защита от ботов, captcha). Путь картинки ничего собой не представляет и просто так не открыть, оно только грузится в браузере когда заходиш на страницу, так вот я и думаю, можна ли как-то сохранить эту картинку????

Creat0R
01-05-2009, 17:08
можна ли как-то сохранить эту картинку? »
Скорее всего что можно.

aesir
01-05-2009, 17:30
Скорее всего что можно. »
та я сохраняю картинки, но именно вместо нужной мне сохраняется пхп файл с ошибкой:(

Creat0R
01-05-2009, 18:53
aesir,
Но вы понимаете что без дополнительной информации, вам помочь никто не сможет?
Адрес страницы с картинкой, и код который у вас не работает желательно увидеть.

aesir
01-05-2009, 19:08
аа да не вопрос, сайт может быть любым на движке DLE, в моем случае: http://www.binural.ru/addnews.html
А вот и код:

#include <IE.au3>

$sImgDir = "d:\123\"
$sWebPage = "http://binural.ru/"

$oIE = _IECreate()
_IENavigate($oIE, $sWebPage)
_IELoadWait($oIE)
_IENavigate($oIE, "http://www.binural.ru/addnews.html")
_IELoadWait($oIE)

$oIMGs = _IETagNameGetCollection($oIE, "img")

For $oIMG in $oIMGs
$sImgUrl = $oIMG.src
$sImgFileName = $oIMG.nameProp
INetGet($sImgUrl, $sImgDir & $sImgFileName)
Next

Creat0R
01-05-2009, 19:23
сохраняется пхп файл с ошибкой »
Если я понимаю верно, то это происходит из за того что эту картинку может видеть только залогененный (вошедший под своим именем) пользователь, а при использовании _IECreate / _IENavigate создаётся инстанция IE как для гостя :)

Я тоже как и IE, эту картинку не вижу ;)

aesir
01-05-2009, 19:26
Я тоже как и IE, эту картинку не вижу »
не, ну это само собой канешна, на сайт я залогинююсь скриптом, а потом только сохранить пытаюсь:))) просто процес логина опустил дабы не усложнять:)))

Creat0R
01-05-2009, 19:51
процес логина опустил дабы не усложнять »
Как раз таки наоборт, опущенные детали и усложняют процесс попытки помощи :) - Я то не могу проверить скрипт как положенно, чтобы попытаться решить проблему... оригинальные логин и пароль не нужно конечно выкладывать, но можете залогинить нового юзера, тестера, и дать его данные (в скрипте) ;)

aesir
02-05-2009, 01:03
Как раз таки наоборт, опущенные детали и усложняют процесс попытки помощи - Я то не могу проверить скрипт как положенно, чтобы попытаться решить проблему... оригинальные логин и пароль не нужно конечно выкладывать, но можете залогинить нового юзера, тестера, и дать его данные (в скрипте) »
Сказано - сделано:)

;log - autoittest
;pwd - oszone
Func LoginToSite($userName, $userPassword)
_IENavigate($browser, "http://binural.ru/")
_IELoadWait($browser)
$name = _IEGetObjByName($browser, "login_name")
$pwd = _IEGetObjByName($browser, "login_password")
If ($_IEStatus_Success) Then
_IEFormElementSetValue($name, $userName)
_IEFormElementSetValue($pwd, $userPassword)
$form = _IEFormGetCollection($browser, 0)
_IEFormSubmit($form)
_IELoadWait($browser)
EndIf
_IENavigate($browser, "http://www.binural.ru/addnews.html")
_IELoadWait($browser)
EndFunc

Creat0R
02-05-2009, 01:40
Сказано - сделано »
Там стоит антибот, получить это изображение будет не так просто ;)

Вот примерно так можно:

#include <IE.au3>
#include <ScreenCapture.au3>

$sImgDir = "D:\123\"
$sWebPage = "http://binural.ru/"

$oIE = _IECreate("http://www.binural.ru/addnews.html")

LoginToSite($oIE, "autoittest", "oszone")

$hIE_Body = ControlGetHandle("[CLASS:IEFrame]", "", "Internet Explorer_Server1")
WinActivate($hIE_Body)

_ScreenCapture_CaptureWnd($sImgDir & "\Captcha.jpg", $hIE_Body, 320, 250, 460, 320, 0)

_IEQuit($oIE)

Func LoginToSite($browser, $userName, $userPassword)
_IENavigate($browser, "http://binural.ru/")
_IELoadWait($browser)

$name = _IEGetObjByName($browser, "login_name")
$pwd = _IEGetObjByName($browser, "login_password")

If ($_IEStatus_Success) Then
_IEFormElementSetValue($name, $userName)
_IEFormElementSetValue($pwd, $userPassword)
$form = _IEFormGetCollection($browser, 0)
_IEFormSubmit($form)
_IELoadWait($browser)
EndIf

_IENavigate($browser, "http://www.binural.ru/addnews.html")
_IELoadWait($browser)
EndFunc

Но при этом на видимой части страницы должна отображаться капча, и я уже не говорю о корректировке координат самой капчи на странице (для захвата снимка).

Creat0R
02-05-2009, 02:03
Хотя судя по исходникам страницы, изображение генерируется в соответствии с текущем временем, получается оно путём Date().getTime(), поэтому мы можем пробовать нечто подобное:


$oSC = ObjCreate("ScriptControl")
$oSC.Language = "JavaScript"

$sImgDir = "D:\123\"
$sWebPage = "http://binural.ru/"

$sFileName = $oSC.Eval("new Date().getTime();") & ".jpg" ;расширение файла возможно другое, а возможно его вовсе нет :)
$sImage_Url = "http://www.binural.ru/addnews.html/engine/modules/antibot.php?rndval=" & $sFileName

ConsoleWrite($sImage_Url & @CRLF)
InetGet($sImage_Url, $sImgDir & $sFileName)

Сложность тут в том, что нужно сгенерировать имя файла (т.е текущее время) в ту же долю секунды(!) когда генерируется файл картинки (капчи) на сервере. Мне это сделать пока не удалось :)

aesir
02-05-2009, 15:21
Но при этом на видимой части страницы должна отображаться капча, и я уже не говорю о корректировке координат самой капчи на странице (для захвата снимка). »
мм прикольное решение:) работает:) 1 вариант решения есть, и это уже радует, но наверное должно быть что-то попроще. А пхп код бота может помочь в даной ситуации?

Creat0R
02-05-2009, 20:36
пхп код бота может помочь в даной ситуации? »
Не уверен.

P.S
А что собственно планируется сделать, не спам-бот случаем? Это тут не приветствуется :unsure:

aesir
02-05-2009, 21:36
Не уверен. »
Ну я думаю тему можна считать закрытой, большое спасибо за помощь! очень благодарен! ато я пробовал всякие другие методы больше ничего на ум не приходит...




© OSzone.net 2001-2012