Что нового

[Сеть, интернет] Загрузка сайта средствами autoit

forfrends

Новичок
Сообщения
176
Репутация
3
Добрый день!
Суть вопроса:
Как можно через аутоит сделать окошко в котором бы загружался заданный сайт (со всеми возможностями, переходами и т.д.)? Чтобы программа работала как мини-браузер.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
forfrends
Посмотрите пример к GUICtrlCreateObj().
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
В Русской справке не рабочий... а вот в он-лайн еще, как работает.
http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateObj.htm


Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example()

; Simple example: Embedding an Internet Explorer Object inside an AutoIt GUI
;
; See also: http://msdn.microsoft.com/workshop/browser/webbrowser/reference/objects/internetexplorer.asp
Func Example()
    Local $oIE, $GUIActiveX, $GUI_Button_Back, $GUI_Button_Forward
    Local $GUI_Button_Home, $GUI_Button_Stop, $msg
   
    $oIE = ObjCreate("Shell.Explorer.2")

    ; Create a simple GUI for our output
    GUICreate("Embedded Web control Test", 640, 580, (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN))
    $GUIActiveX = GUICtrlCreateObj ($oIE, 10, 40, 600, 360)
    $GUI_Button_Back = GUICtrlCreateButton("Back", 10, 420, 100, 30)
    $GUI_Button_Forward = GUICtrlCreateButton("Forward", 120, 420, 100, 30)
    $GUI_Button_Home = GUICtrlCreateButton("Home", 230, 420, 100, 30)
    $GUI_Button_Stop = GUICtrlCreateButton("Stop", 330, 420, 100, 30)

    GUISetState()       ;Show GUI

    $oIE.navigate("http://www.autoitscript.com")

    ; Waiting for user to close the window
    While 1
        $msg = GUIGetMsg()

        Select
            Case $msg = $GUI_EVENT_CLOSE
                ExitLoop
            Case $msg = $GUI_Button_Home
                $oIE.navigate("http://www.autoitscript.com")
            Case $msg = $GUI_Button_Back
                $oIE.GoBack
            Case $msg = $GUI_Button_Forward
                $oIE.GoForward
            Case $msg = $GUI_Button_Stop
                $oIE.Stop
        EndSelect
       
    WEnd

    GUIDelete()
EndFunc   ;==>Example
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Спасибо!
Понял как работает.
Еще вопрос:
как выполнить клик в открывшемся окне?
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
И как определить загрузилась страница или еще нет?
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Хм... а это обязательно делать через GUI?

Есть замечательная библиотека для работы с IE8...
Похожие действия сделал в боте для video.yandex.ru
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Посмотрел только что твой пример. Я новичек и еще многое не понимаю.
Попробовал получить ссылки через
Код:
_IELinkGetCollection

Но не вышло - ссылки на нужной мне странице генерируются ява скриптом, и эти ссылки _IELinkGetCollection не видит. Но вот по ним мне и нужно кликнуть.
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Это сам ява скрипт генерирующий ссылки
[box title=TitleBox]<iframe width="614" height="618" border="1" frameborder="1" style="border: 1px solid #996666; visibility: visible;" scrolling="no" src="http://individual-ki.com/getThumbs?uid=1636812331&p=2&fmt=htm&cityid=1961&lng=ru&fbc=%23FFFFFF&tbc=%23000000&hbc=%23FF0000&hfc=%23FFFFFF&hlu=0&hlhu=0&cols=6&rows=4&tid=2"></iframe>[/box]
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Хм...
sfrom.net/http://www.youtube.com/watch?v=uBxZNkRpfEY
Тут FLV и MP4. это ссылки сгенерированные JavaScript.
Через пример скрипта madmasles
http://autoit-script.ru/index.php?topic=3706.0
Только чуть-чуть переделав...
Код:
#include <IE.au3>
#include <Array.au3>

HotKeySet('{Esc}', '_Exit'); выход по кнопке Esc
$j = 0 ;счетчик найденных ссылок
Dim $aLinks[$j + 1][2];массив, в котором будут храниться найденные ссылки

$sSearch = 'FLV';слово, которое будем искать

$oIE = _IECreate('sfrom.net/http://www.youtube.com/watch?v=uBxZNkRpfEY');открываем IE
$oForm = _IEFormGetCollection($oIE, 0);получаем форму
$oSearch = _IEFormElementGetObjByName($oForm, 'text') ;получаем объект по имени
;_IEFormElementSetValue($oSearch, $sSearch);вставляем слово для поиска
;_IEFormSubmit($oForm, 0) ;отправляем запрос
_IELoadWait($oIE);ждем
sleep(5*1000)
;For $i = 0 To 4 ;будем искать ссылки на 5-и первых страницах с результатами поиска.
    ;If $i Then ;на первой странице уже искали
        $sText = _IEBodyReadText($oIE) ;читаем текст на странице
        If StringInStr($sText, 'FLV') Then ;если на странице есть этот текст
            _IELinkClickByText($oIE, 'FLV') ;кликаем по ссылке, т.е. переходим на следующую страницу
        Else ;если на странице нет текста 'следующая'
            ;ExitLoop;выходим из цикла
        EndIf
    ;EndIf
	sleep(5*1000)
    $oLinks = _IELinkGetCollection($oIE) ;получаем коллекцию ссылок на странице
    For $oLink In $oLinks ;в цикле проверяем все ссылки на странице
        If StringInStr($oLink.innertext, $sSearch) Then ;если в тексте ссылки есть искомое слово
            $j += 1;увеличиваем счетчик на 1
            ReDim $aLinks[$j + 1][2];изменяем размер массива
            $aLinks[$j][0] = $oLink.innertext;добавляем в массив текст ссылки
            $aLinks[$j][1] = $oLink.href;добавляем в массив адрес ссылки
        EndIf
    Next
    $aLinks[0][0] = $j;присваиваем этому элементу массива число - количество найденных ссылок.
;Next
;_IEQuit($oIE) ;можно закрыть окно IE
_ArrayDisplay($aLinks, 'Найденные ссылки');показываем полученный массив
_IENavigate($oIE, $aLinks[1][1])
Func _Exit()
    _IEQuit($oIE)
    Exit
EndFunc   ;==>_Exit

открывем IE
ждем пока откроется
Ждем еще 10 сек пока прогрузится Java
Собираем текст и видя ссылку с "FLV" кликаем и не работает... :(
Ждем 5 сек выдаем список ссылок...
При закрытии пытается перейти в 1-м окне через _IENavigate... в принципе файл сохроняет, но не тот...

В итоге выкрутился костылем...
1. Просмотрел html-код.
2. Нашел который не меняется. Сделал на него фокус, два TAB и ENTER. Так работает.
Код:
$oSubmit = _IEGetObjByName ($URL, "sf_url")
_IEAction($oSubmit, "Focus")
sleep(100)
Send("{TAB 2}")
sleep(1000)
Send("{ENTER}")
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
У меня проблема немного иного рода.
Мне нужно не просто получить ссылку а выполнить клик по ссылке которая сгенерирована ява скриптом и выглядит примерно так:
[box title=TitleBox]http://individual-ki.com/in.htm?wm=1636812331&l=&p=2&pp=c2lkPTI5MDMwJmdpZD00MjIyMA==&crf=oeq9j%252FfClx%252B6QFiAO5vdhNW7JIqMKaxv01UzoqYOpW5SOSPa9Uk%252FUZxy1d16q4Hx[/box]
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
964
forfrends
Вот решение вашей задачи:
Код:
#include<IE.au3>
Dim $oIE, $oWait
$oIE = _IECreate("http://ru.savefrom.net/http:/www.youtube.com/watch?_openstat=shrt;sfrom;;&v=uBxZNkRpfEY")

While 1
	$oWait = _IEGetObjById($oIE, "sf_indicator_box")
	If Not $oWait.style.display Then
		While 1
		If $oWait.style.display == "none" Then
			_LinkClick("FLV")
			Exit
		EndIf
		Sleep(250)
		WEnd
	EndIf
	Sleep(250)
WEnd

Func _LinkClick($sText)
	Local $oLinks
	$oLinks = _IELinkGetCollection($oIE)
	For $oLink In $oLinks
		If _IEPropertyGet($oLink, "innertext") == $sText Then
			_IENavigate($oIE, $oLink.href)
		EndIf
	Next
EndFunc
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Garrett
Дык у меня тоже самое:
Код:
_IENavigate($oIE, $aLinks[1][1])

и у тебя.
Код:
_IENavigate($oIE, $oLink.href)

Эффект тот же. На ссылку якобы жмет и диалог загрузки появляется, вот только не грузится. Если на ссылку нажать в ручную загрузка начинается.
На IE8 под WinXP и Win7 не пашет. Может у тебя, что-то есть, чего у нас нет? :scratch:
 
Верх