Что нового

Ожидание Полной загрузки IE

HelpMe

Новичок
Сообщения
85
Репутация
3
Не успевает загрузиться страничка, а скрипт продолжает работу...
WinWaitActive ( "title", ["text"], [timeout] ) - не помогает....
может есть альтернатива?
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Если создавал через библиотеку IE.au3, то:
Код:
_IELoadWait($ieObject)
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
Гиперссылка динамическая...
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
Nik_rus сказал(а):
Если создавал через библиотеку IE.au3, то:
Код:
_IELoadWait($ieObject)
:thumbs_down:
Но всёравно спасибо...
а на появление слова в IE - можно поставить ожидание?
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Если честно я не телепат и думаю сообществу было бы интересно увидеть код. Или его кусок.
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
($ieObject) - Требует гипперсылку...

Код:
$oIE = _IECreate ("http://www.autoitscript.com/forum/index.php")
Send("{TAB 12}")
Send("{ENTER}")
_IELoadWait ($oIE)


где http:// - не константа...
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Пройдем по коду:
1. Создается IE.
2. Отрабатывает TAB.
3. Отрабатывает Enter.
4. Идет ожидание загрузки страницы.
По-моему что-то не так, не правда ли?
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
Nik_rus сказал(а):
Пройдем по коду:
1. Создается IE.
2. Отрабатывает TAB.
3. Отрабатывает Enter.
4. Идет ожидание загрузки страницы.
По-моему что-то не так, не правда ли?

Выше приведен пример... разве _IELoadWait() Можно запускать так?
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Должно быть так:
Код:
$oIE = _IECreate ("http://www.autoitscript.com/forum/index.php")
_IELoadWait ($oIE)
Send("{TAB 12}")
Send("{ENTER}")
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
да это просто пример из учебника... )) AutoIt3_2_5_4_ru
может мною стал не так понятен пример?
в _IELoadWait
_IECreate - без этого можно обойтись?
просто уже несколько шагов сделано... страничка загружается и загружается титул, а потом всё остальное... время загрузки не точное поэтому происходят сбои, есть другой вариант? например ожидание(поиск) слова? ато со слипом морока получается...


Добавлено:
Сообщение автоматически объединено:

_IECreate - без этого можно обойтись?

Точнее без указания http://


Добавлено:
Сообщение автоматически объединено:

Nik_rus - твой ответ наиболее близок и как мне кажется - любой бы дал такойже, но помоему не поможет :'(
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Да какая разница, что ты там укажешь в _IECreate - "http://..." строку или $:rofl: переменую. Или вообще ничего.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
HelpMe [?]
_IECreate - без этого можно обойтись?
Можно так попробовать:
Код:
Opt('WinTextMatchMode', 2)

$sTitle = 'Windows Internet Explorer'
$sIE = @ProgramFilesDir & '\Internet Explorer\iexplore.exe'
$sUrl = 'http://autoit-script.ru/index.php?action=forum'
Run($sIE & ' ' & $sUrl)
$hIE = WinWait($sTitle)
While 1
	If StringInStr(ControlGetText($hIE, '', '[CLASS:msctls_statusbar32; INSTANCE:1]'), 'Готово') Then ExitLoop
	Sleep(50)
WEnd
MsgBox(64, 'Тест', 'Страница загружена.' & @CRLF & 'Можно с ней дальше работать.')
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
Nik_rus сказал(а):
Да какая разница, что ты там укажешь в _IECreate - "http://..." строку или $:rofl: переменую. Или вообще ничего.

нет, Не наботает так...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Nik_rus [?]
Если честно я не телепат и думаю сообществу было бы интересно увидеть код. Или его кусок.
Это нужно написать на титульной странице красным цветом и максимальным шрифтом! ;D

HelpMe сказал(а):
($ieObject) - Требует гипперсылку...

Код:
$oIE = _IECreate ("http://www.autoitscript.com/forum/index.php")
Send("{TAB 12}")
Send("{ENTER}")
_IELoadWait ($oIE)


где http:// - не константа...
А так не легче?
Код:
#include <IE.au3>
$oIE = _IECreate ("http://www.autoitscript.com/forum/index.php")
_IELinkClickByText($oIE, 'Wiki')


P.S. _IECreate сама ожидает полной загрузки документа, так что нужды в дополнительной функции _IELoadWait нет нужды.
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
Garrett сказал(а):
Nik_rus [?]
Если честно я не телепат и думаю сообществу было бы интересно увидеть код. Или его кусок.
Это нужно написать на титульной странице красным цветом и максимальным шрифтом! ;D

HelpMe сказал(а):
($ieObject) - Требует гипперсылку...

Код:
$oIE = _IECreate ("http://www.autoitscript.com/forum/index.php")
Send("{TAB 12}")
Send("{ENTER}")
_IELoadWait ($oIE)


где http:// - не константа...
А так не легче?
Код:
#include <IE.au3>
$oIE = _IECreate ("http://www.autoitscript.com/forum/index.php")
_IELinkClickByText($oIE, 'Wiki')


P.S. _IECreate сама ожидает полной загрузки документа, так что нужды в дополнительной функции _IELoadWait нет нужды.

Это онлайн игра и в игре идет бой - что тогда делать?
странно... на функцию _IELinkClickByText - нет странички в справочнике ) битый какойто... это только у меня?
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
:idea: Буду копировать часть экрана и если ClipGet() будет = константе то продолжаю, если нет - опять копирую :smile:
:IL_AutoIt_1: - за то что малыми знаниями можно придумать разное :smile:))) :graduated:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
HelpMe [?]
Это онлайн игра и в игре идет бой - что тогда делать?
Думать! :smile:
А по существу, нужно смотреть, как меняется документ, и из этого строить алгоритм.
Для отлова динамических данных нужно писать функцию Listener.

К примеру, у вас на странице показаны цифры таймера, которые меняются с течением времени, и стоит задача за сорок секунд до окончания времени вывести:
Код:
MsgBox(0,'Внимание!','Осталась 40 сек.').


Для этого, пишем функцию _ListenerTimer:
Код:
Func _ListenerTimer()
	$oTimer = _IEGetObjById($oIE,'download_waiter_remain')
	If Not @error Then
		If _IEPropertyGet($oTimer, 'innertext') = 40 Then
			MsgBox(48, 'Внимание!', 'Осталось ' & _IEPropertyGet($oTimer, 'innertext') & ' сек.')
			AdlibUnRegister('_ListenerTimer')
			Exit
		EndIf
	EndIf
EndFunc


Пишем код с нашей функцией:
Код:
#include <IE.au3>

$oIE = _IECreate("http://depositfiles.com/ru/files/31bg2hufe")
$oButtons = _IETagNameGetCollection($oIE, "input")

For $oButton In $oButtons
	If StringStripWS($oButton.value, 3) = 'Бесплатно' Then _IEAction($oButton, 'click')
Next
_IELoadWait($oIE)
AdlibRegister('_ListenerTimer')

While 1
	Sleep(250)
WEnd

Вот и всё!
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
не... мой метод был более продвинутый :smile: но пришел к тому же что и у Вас :ok:
Решил по другому... существует некий "Edit11" на страничке, который имеет n-вариантов ответов... ответ 1 - стоит по умолчанию, и перед обновлением стр. ответ 1 меняю на ответ 2 и при помощи WinWaitActive("Титул", "ответ 1") ожидаю появление первого ответа :smile:

Как понимается нужно иметь немного наблюдательности для работы в IE и никакие _IELoadWait - не понадобились :smile:))

Есть еще пару наблюдений... Можно Открыть и обновлять соседнюю вкладку браузера, это может помочь, если ожидание идет на ответ сервера... соответственно если сервер дал ответ вкладке 2 то и вкладка 1 уже должна быть загружена.... более удобно когда вкладка 2 выдает ошибку, т.е. появляется "динамика" :smile:) можно просто поставить на ожидание ошибки, если ошибка произошла, то и действия в вкладке 1 закончены... простота заключается в том что не нужно знать много функций :smile: но времена меняются...


с моей стороны были попытки как можно больше обобщить тему...
Всем спасибо за внимание, тему можно закрывать на ожидании динамики... :bye:


Добавлено:
Сообщение автоматически объединено:

Чото букаф много получилось... :scratch:
 
Верх