Что нового

[Сеть, интернет] Ожидание полной загрузки страницы в Opera.

Math

Новичок
Сообщения
85
Репутация
1
Есть скрипт со следующим кодом:

Код:
_OperaRun()
$UrlSite = IniRead($SiteList, "site", "Url", "")
$WinSite = IniRead($SiteList, "site", "WinSite", "")

_OpenGetURL($UrlSite, 0, 0, "Opera")
$WinSiteAct = WinWaitActive($WinSite, '', 60)
If $WinPostAct Then
	Sleep(15000)
	;дальнейшие действия
Else
	_OperaClose()
EndIf


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

Возможно ли в опере сделать так, что бы скрипт ожидал полной загрузки страницы, и уже после этого выполнял дальнейшие действия? Например, определял по каким-либо признакам, что страница загружена.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Я пока в это не углублялся, но наверняка можно отслеживать активное соединение Opera интернетом, и соответственно проверять не завершено ли оно (запросы точнее).
 
Автор
M

Math

Новичок
Сообщения
85
Репутация
1
CreatoR сказал(а):
Я пока в это не углублялся, но наверняка можно отслеживать активное соединение Opera интернетом, и соответственно проверять не завершено ли оно (запросы точнее).

Но как это сделать практически?
 
Автор
M

Math

Новичок
Сообщения
85
Репутация
1
Может можно это использовать?

r.jpg
 
Автор
M

Math

Новичок
Сообщения
85
Репутация
1
Вопрос этот остаётся открытым и по сей день. Или это невозможно?
 

ArtInt

Знающий
Сообщения
135
Репутация
18
Можно отследить что-то вроде нагрузки интернета (надеюсь меня поняли, а то выражаюсь неясно :() , и понять, грузит он что-то или нет, другого способа я придумать не могу, а вышеописанный слишком сложен :-[ :'(
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
В примитиве:
если интернет использует только Опера, то можно открыть окно "состояние сети", там найти контрол который показывает количество полученных байт, окно скрыть, в цикле следить за контролом, когда увеличение числа байт останавливается, значит, страницы загружены.

Также, можно попробовать отслеживать загрузку процессом "opera.exe" процессора. Если вкладок открывается много, а комп не свермощный, то тоже должно работать:

Код:
#Include <WinAPIEx.au3>

Global Const $sProcess = "opera.exe"
Global $PID = 0, $Prev1 = 0, $Prev2 = 0, $zagruzka=0
$i=0 
While 1
$i+=1	
$var=_Update()
If $var <= 1 and $i > 1 Then
ExitLoop
EndIf	

sleep(1000)
WEnd
MsgBox(0, "Заголовок", "Загрузка резко снизилась!") 

Func _Update()
    Local $ID, $Time1, $Time2
    $ID = ProcessExists($sProcess)
    If $ID Then
        $Time1 = _WinAPI_GetProcessTimes($ID)
        $Time2 = _WinAPI_GetSystemTimes()
        If (IsArray($Time1)) And (IsArray($Time2)) Then
            $Time1 = $Time1[1] + $Time1[2]
            $Time2 = $Time2[1] + $Time2[2]
            If ($Prev1) And ($Prev2) And ($PID = $ID) Then
	$zagruzka=Round(($Time1 - $Prev1) / ($Time2 - $Prev2) * 100)
            EndIf
            $Prev1 = $Time1
            $Prev2 = $Time2
            $PID = $ID
          Return $zagruzka	  
        EndIf
    EndIf
    $Prev1 = 0
    $Prev2 = 0
    $PID = 0
EndFunc

Основано на примере Yashied
 

ArtInt

Знающий
Сообщения
135
Репутация
18
WSWR , однако это не самые стабильные решения - "если грузится только эта вкладка", "если открыто много", "если..." :(
 
Автор
M

Math

Новичок
Сообщения
85
Репутация
1
WSWR,
У меня этот код срабатывает намного раньше, чем полностью загрузится страница.
Это первое практическое решение здесь, хотя по моему мнению - очень ненадёжное.

Состояние сети - в моём случае тоже будет работать ненадёжно.

Я думаю, может сделать отслеживание появления какого либо текста в окне браузера? К примеру, при заходе на этот сатйт будет надпись "Русское сообщество AutoIt". Её и отслеживать.
Но есть ещё одна проблема - Опера через некоторое время перерисовывает страницу.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
А почему именно опера, какая задача?
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Math
Если вкладок много, то видимая может уже загрузиться, а какая-то другая - нет.
А так реализовать появление текста на видимой вкладке можно средствами OCR, например Tesseract-ом.
 
Верх