Что нового

Не нажимаются кнопки на странице - хотя на самом IE все срабатывает

Geqsogen

Новичок
Сообщения
24
Репутация
1
Есть такой ActiveX "WebViewer" для просмотра видео с регистраторов (не автомобильных - но это и не важно).
Через веб-интерфейс мы заходим на страницу с авторизицией - вводим логин, пароль и нажимаем ссылку "login".
Далее переходим на страницу, где как раз работает ActiveX - мне на этой странице необходимо нажать кнопки в определенном порядке. Тут загвоздка - ничего не нажимает, хотя кнопки самого браузера все тем же ControlClick срабатывают. В чем может быть проблема?
Код:
; подключение библиотеки
#include <IE.au3> 
; открываем главную страницу
$oIE = _IECreate ("http://192.168.138.252:7000/main.htm")
; Ждем, пока загрузится странинца
_IELoadWait ($oIE)
; Подключаем форму
$oForm = _IEFormGetCollection ($oIE, 0)
; Берем два поля и заполняем логином и паролем
$oLogin = _IEFormElementGetCollection ($oForm, 0)
$oPass= _IEFormElementGetCollection ($oForm, 2)
_IEFormElementSetValue ($oLogin, "user")
_IEFormElementSetValue ($oPass, "user")
_IELoadWait ($oIE)
; Кликаем по ссылке "Login" (то есть по картинке)
_IEImgClick ($oIE, "img/login_btn1.gif", "src")
; Переходим к окну
$WinTitle = "Smartec EasyNet - WebViewer - Windows Internet Explorer"
WinWaitActive($WinTitle, "http://192.168.138.252:7000/webviewer.htm")
WinActivate($WinTitle, "http://192.168.138.252:7000/webviewer.htm")
; Window Info показал нам координаты и ID приложения на странице - но ничего не кликается (в ID вставлял и Class & Classname & Advenced Mode)
ControlClick($WinTitle, "", "[CLASS:#32770; INSTANCE:3]","",1,300, 100)
; Просто обновить страницу кликом по кнопке "refresh" - срабатывает на ура.
ControlClick ($WinTitle, "", "ToolbarWindow323", "", 1, 1, 1)
Exit

Win7 x86 - IE9
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Приведите исходный код страницы(фреймов) и обозначьте (например жирным) что именнно нужно нажать.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Geqsogen,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
G

Geqsogen

Новичок
Сообщения
24
Репутация
1
Код страницы очень прост:
<html>
<head>

<script type="text/javascript" src="script.js"></script>
<script language="JavaScript" type="text/JavaScript">
<!--

function GotoErrorPage(nStatus ) {

alert("Authorization is failed.") ;
/*
if( nStatus == 401 ) {
alert("Password is wrong.") ;
} else if( nStatus == 403 ){
alert("Unknown User. Please check your user id.");
} else if( nStatus == 203 ){
alert("Unauthorized User. Please ask to Administrator.");
} else if( nStatus == 10 ){
alert("User ID or password is missing!");
} else {
alert("Internal server error occurs. Please, try to login again.") ;
}*/


window.location = "./main.htm"
}


function SetValue()
{
var user = GetCookie('user') ;
var passwd = GetCookie('pass') ;

if( !user || !passwd ) {
GotoErrorPage( 10 );
return ;
}
var port = 80 ;
if( window.location.port == 0 )
port = 80 ;
else
port = window.location.port ;

document.all.monitor.ViewerMode = 3 ; // dvr_viewer for smartec(3)
document.all.monitor.SetConnectionInfo( window.location.hostname, port, user, passwd ) ;
document.all.monitor.Init() ;

}
//-->
</script>
<title>Smartec EasyNet - WebViewer</title>
</head>


<body onload="SetValue();" topmargin="10" >
<script src="writeobject.js"></script>
</body>

<SCRIPT LANGUAGE="javascript" FOR="monitor" EVENT="LoginStatus(nStatus)">
GotoErrorPage( nStatus );
</SCRIPT>

</html>
Как я понимаю там идет только проверка авторизации и запускается надстройка dvr_viewer (она устанавливается отдельно именно для IE)
Выглядит страница вот так - мне надо нажать хоть одну кнопку для начала (выделено красным справа):


Попробовал просто кликом мышки - работает - но боюсь что координаты могут изменятся от версии IE:
Код:
Opt("MouseCoordMode",2)
MouseClick("", 776, 376, 1, 0)


ПыСы Модератору - исправил.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А что показывает инспектор объектов для этой кнопки?
 

Asshaker

Знающий
Сообщения
150
Репутация
17
Попробуй в IE8
Покажи "исходный код страницы" той что на картинке
 
Автор
G

Geqsogen

Новичок
Сообщения
24
Репутация
1
inververs сказал(а):
А что показывает инспектор объектов для этой кнопки?
Window Info определяет всю надстройку как единый объект и внутри него не определяет какие то другие объекты (на скриншоте выделено пурпурным):

Asshaker сказал(а):
Попробуй в IE8
Покажи "исходный код страницы" той что на картинке
Мне нужно именно под IE9. Исходный код приведен в третьем сообщении данного поста
Garrett сказал(а):
Режим совместимости включён?
В любом режиме совместимости Window Info показывает одно и тоже.

Чего я хочу добиться:
Даже если рассматривать это приложение на странице IE как единый обьект, то расположение кнопок навигации всегда статичен. Я хочу "кликнуть" (ControlClick) на этот объект по координатам, но почему то он не кликает по нему ни в какое место. Пока решил только через "MouseClick" - но это не красиво и не правильно.
 
Автор
G

Geqsogen

Новичок
Сообщения
24
Репутация
1
Asshaker сказал(а):
тогда тебе поможет
Код:
PixelSearch
MouseClick
Боюсь в этой каше трудно будет найти нужный мне. Или я как то не правильно понимаю функцию поиска одного пикселя :scratch:
 

Asshaker

Знающий
Сообщения
150
Репутация
17
http://autoit-script.ru/autoit3_docs/functions/PixelSearch.htm
Код:
PixelSearch (x1, y1, x2, y2, color )

WinInfo смотришь координаты кнопок там же цвет пикселей
Потом определяешь область поиска x1,y1,x2,y2 и тыкаешь мышкой :smile:
Правда в свернутом окне это работать не будет
Покопайся тут http://autoit-script.ru/index.php/board,18.0.html
куча примеров

З.Ы. Вообще странный код для страницы... больше похож на форму логина.
 

Futurebear

Знающий
Сообщения
29
Репутация
6
Судя по адресу система лежит на вашем серваке. Если кнопки в виде картинок, попробуйте назначить каждой свой цвет, а потом искать координаты пикселя и кликать туда.
 
Автор
G

Geqsogen

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

Futurebear сказал(а):
Судя по адресу система лежит на вашем серваке. Если кнопки в виде картинок, попробуйте назначить каждой свой цвет, а потом искать координаты пикселя и кликать туда.
Это веб-интерфейс регистратора - на нем не очень поковыряешься. Это приложение DVB WebViewer - что то похожее на Adobe Flash. То есть в код не просто так попасть.

Но жаль конечно, что нельзя просто кликать по нужным координатам без использования движения курсора...
 

Asshaker

Знающий
Сообщения
150
Репутация
17
Geqsogen [?]
Asshaker Когда я имел ввиду кашу - то говорил про то, что на изображении с камер тоже может попасться такой же цвет пикселя как и на кнопке. Чтож спасибо за подсказку - буду искать самый первый цвет (темно синий) в левом верхнем углу и потом уже добавлять координаты кнопок к полученным координатам.
Почитай все таки раздел ботоводов...
Ты должен искать пиксель в области.
Пример:
0.0 это левый верхний угол, кнопка имеет размер 20х20 пикселей
координаты кнопки 857х589, цвет пикселя 0х000ААА
Код:
PixelSearch(857,589,877,609,0x000AAA)

если ты имеешь ввиду что кнопки всегда будут в разных местах, тооо... хз (WTF!& Хэ Зэ) :smile:
 
Автор
G

Geqsogen

Новичок
Сообщения
24
Репутация
1
Asshaker
Спасибо за советы, поясню как я сделал и почему не могу сделать как ты советуешь.
Я ищу пиксель от координат (0, 0) левого угла браузера до (100, 300). Почему так? Проблема в том что верхняя панель браузера у всех разной ширины (всякие надстройки и прочие гуглобары). Тут я нахожу первый пиксель синей "шапки", ну а далее все просто - относительно левого угла шапки все кнопки "DVB WebViewer" статичны.

Твой совет с кнопкой как раз в это и упирается - никогда не буду уверен точно, что нашел именно ту кнопку, если искать ее по цвету в диапазоне +-5 пикселей (они рядом все и одинакового цвета).

Весь вопрос топика был в том, чтобы не мышкой кликать, а использовать более "красивые" функции. Видимо не судьба и топик можно закрывать - вопрос наполовину решен. Всем спасибо! :beer:

ПыСы Если кому то интересно, то приведу пример того, что в итоге получилось:
Код:
; Берем координаты относительно активного окна
Opt("MouseCoordMode",2)
Opt("PixelCoordMode",2)
$cordX=0;
$cordY=0;
; Ищем темносиний цвет заголовка
$coord = PixelSearch( 0, 0, 100, 250, 0x000066, 2, 2)
If Not @error Then
	$cordX=$coord[0]
	$cordY=$coord[1]
; Иначе ищем первый пиксель белого фона и добавляем 12px отступа до синего фона шапки (не факт что во всех браузерах отступ именно 12px)
Else
	$coord = PixelSearch( 0, 0, 100, 250, 0xFFFFFF, 2, 2)
	$cordX=$coord[0]+12
	$cordY=$coord[1]+12
 EndIf
; Начинаем кликать по нужным нам кнопкам
MouseClick("", (765+$cordX), (315+$cordY), 1, 0)
MouseClick("", (790+$cordX), (80+$cordY), 1, 0)
MouseClick("", (790+$cordX), (105+$cordY), 1, 0)
MouseClick("", (790+$cordX), (130+$cordY), 1, 0)
MouseClick("", (790+$cordX), (155+$cordY), 1, 0)
MouseClick("", (790+$cordX), (180+$cordY), 1, 0)
MouseClick("", (790+$cordX), (205+$cordY), 1, 0)
MouseClick("", (790+$cordX), (230+$cordY), 1, 0)
; Перед запуском на весь экран подождем - иначе плагин может затупить.
sleep(1000)
MouseClick("", (790+$cordX), (340+$cordY), 1, 0)
Exit
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Geqsogen [?]
Проблема в том что верхняя панель браузера у всех разной ширины (всякие надстройки и прочие гуглобары).
А вы используйте на абсолютные координаты, а так сказать CONTROL, тогда гуглобары и синяя строка влиять не будут. Но есть одно существенное НО, и называется оно разрешение экрана...
 

Asshaker

Знающий
Сообщения
150
Репутация
17
Удачи :smile:
Но все же IE8 и код странницы другой, я прям чувствую это.

З.Ы. Кнопки можно идентифицировать тем же PixelSearch'ем :smile: поискав уникальные пиксели циферок на кнопочках.
 
Автор
G

Geqsogen

Новичок
Сообщения
24
Репутация
1
Сдается мне, что это уже оффтоп, но:
mr.Gbabak, может я где и туплю - вроде в начале писал что "ControlClick" не проходит на данной надстройке. Ну или тогда в нужном направлении поточнее направьте. А то звучит как "У вас машина не работает? Вам надо двигатель завести" )))
Asshaker и опять вернулись не к тому. Код страницы везде одинаков, потому что это ActivX! Это тоже самое, как смотреть код страницы пытаясь работать с Flash - сами понимаете код страницы ничего не даст в данном случае.
 
Автор
G

Geqsogen

Новичок
Сообщения
24
Репутация
1
Garrett
Напоминает моего препода по физике "Ты не понял что я объяснил? Значит бери учебник и разбирайся!".. Физику я так и не понял ;D
Ладно, буду копать ActiveX - если не устроит нынешний вариант.
 
Верх