-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Сохранение изображения(captcha)
Всем привет! Подскажите можно ли как-нить сохранить, или напрямую отобразить картинку со страници, только это не обычная картинка а код(на сайте, защита от ботов, captcha). Путь картинки ничего собой не представляет и просто так не открыть, оно только грузится в браузере когда заходиш на страницу, так вот я и думаю, можна ли как-то сохранить эту картинку????
|
Цитата:
Цитата aesir
можна ли как-то сохранить эту картинку? »
|
Скорее всего что можно.
|
Цитата:
Цитата Creat0R
Скорее всего что можно. »
|
та я сохраняю картинки, но именно вместо нужной мне сохраняется пхп файл с ошибкой:(
|
aesir,
Но вы понимаете что без дополнительной информации, вам помочь никто не сможет?
Адрес страницы с картинкой, и код который у вас не работает желательно увидеть.
|
аа да не вопрос, сайт может быть любым на движке 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
|
Цитата:
Цитата aesir
сохраняется пхп файл с ошибкой »
|
Если я понимаю верно, то это происходит из за того что эту картинку может видеть только залогененный (вошедший под своим именем) пользователь, а при использовании _IECreate / _IENavigate создаётся инстанция IE как для гостя :)
Я тоже как и IE, эту картинку не вижу ;)
|
Цитата:
Цитата Creat0R
Я тоже как и IE, эту картинку не вижу »
|
не, ну это само собой канешна, на сайт я залогинююсь скриптом, а потом только сохранить пытаюсь:))) просто процес логина опустил дабы не усложнять:)))
|
Цитата:
Цитата aesir
процес логина опустил дабы не усложнять »
|
Как раз таки наоборт, опущенные детали и усложняют процесс попытки помощи :) - Я то не могу проверить скрипт как положенно, чтобы попытаться решить проблему... оригинальные логин и пароль не нужно конечно выкладывать, но можете залогинить нового юзера, тестера, и дать его данные (в скрипте) ;)
|
Цитата:
Цитата Creat0R
Как раз таки наоборт, опущенные детали и усложняют процесс попытки помощи - Я то не могу проверить скрипт как положенно, чтобы попытаться решить проблему... оригинальные логин и пароль не нужно конечно выкладывать, но можете залогинить нового юзера, тестера, и дать его данные (в скрипте) »
|
Сказано - сделано:)
Код:
;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
|
Там стоит антибот, получить это изображение будет не так просто ;)
Вот примерно так можно:
Код:
#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
Но при этом на видимой части страницы должна отображаться капча, и я уже не говорю о корректировке координат самой капчи на странице (для захвата снимка).
|
Хотя судя по исходникам страницы, изображение генерируется в соответствии с текущем временем, получается оно путём 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)
Сложность тут в том, что нужно сгенерировать имя файла (т.е текущее время) в ту же долю секунды(!) когда генерируется файл картинки (капчи) на сервере. Мне это сделать пока не удалось :)
|
Цитата:
Цитата Creat0R
Но при этом на видимой части страницы должна отображаться капча, и я уже не говорю о корректировке координат самой капчи на странице (для захвата снимка). »
|
мм прикольное решение:) работает:) 1 вариант решения есть, и это уже радует, но наверное должно быть что-то попроще. А пхп код бота может помочь в даной ситуации?
|
Цитата:
Цитата aesir
пхп код бота может помочь в даной ситуации? »
|
Не уверен.
P.S
А что собственно планируется сделать, не спам-бот случаем? Это тут не приветствуется :unsure:
|
Ну я думаю тему можна считать закрытой, большое спасибо за помощь! очень благодарен! ато я пробовал всякие другие методы больше ничего на ум не приходит...
|
Время: 16:35.
© OSzone.net 2001-