Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Сохранение изображения(captcha) (http://forum.oszone.net/showthread.php?t=139098)

aesir 01-05-2009 16:36 1108609

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

Creat0R 01-05-2009 17:08 1108627

Цитата:

Цитата aesir
можна ли как-то сохранить эту картинку? »

Скорее всего что можно.

aesir 01-05-2009 17:30 1108635

Цитата:

Цитата Creat0R
Скорее всего что можно. »

та я сохраняю картинки, но именно вместо нужной мне сохраняется пхп файл с ошибкой:(

Creat0R 01-05-2009 18:53 1108676

aesir,
Но вы понимаете что без дополнительной информации, вам помочь никто не сможет?
Адрес страницы с картинкой, и код который у вас не работает желательно увидеть.

aesir 01-05-2009 19:08 1108685

аа да не вопрос, сайт может быть любым на движке 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 1108694

Цитата:

Цитата aesir
сохраняется пхп файл с ошибкой »

Если я понимаю верно, то это происходит из за того что эту картинку может видеть только залогененный (вошедший под своим именем) пользователь, а при использовании _IECreate / _IENavigate создаётся инстанция IE как для гостя :)

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

aesir 01-05-2009 19:26 1108696

Цитата:

Цитата Creat0R
Я тоже как и IE, эту картинку не вижу »

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

Creat0R 01-05-2009 19:51 1108713

Цитата:

Цитата aesir
процес логина опустил дабы не усложнять »

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

aesir 02-05-2009 01:03 1108925

Цитата:

Цитата 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


Creat0R 02-05-2009 01:40 1108941

Цитата:

Цитата aesir
Сказано - сделано »

Там стоит антибот, получить это изображение будет не так просто ;)

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

Код:

#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 1108950

Хотя судя по исходникам страницы, изображение генерируется в соответствии с текущем временем, получается оно путём 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 1109147

Цитата:

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

мм прикольное решение:) работает:) 1 вариант решения есть, и это уже радует, но наверное должно быть что-то попроще. А пхп код бота может помочь в даной ситуации?

Creat0R 02-05-2009 20:36 1109277

Цитата:

Цитата aesir
пхп код бота может помочь в даной ситуации? »

Не уверен.

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

aesir 02-05-2009 21:36 1109305

Цитата:

Цитата Creat0R
Не уверен. »

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


Время: 16:35.

Время: 16:35.
© OSzone.net 2001-