Что нового

[Автоматизация] Помогите кликнуть на хитрую кнопку под <span> с javascript

sunbeam_2001

Новичок
Сообщения
11
Репутация
1
Автоматизирую загрузку товаров в интернет-магазин через веб-интерфейс. На AutoIt GUI, в который встроен IE.

При заполнении карточки товара есть поле "описание", поддерживающее форматирование, которое работает в двух режимах: визуального форматирования текста и ввода HTML. С переключением на режим ввода HTML как раз проблемы.

Режим переключается нажатием на кнопку "Источник":

source.JPG


При наведении мышки кнопка становится голубой, при нажатии -- синей.

Вот что вытащил с помощью FireFox:

Код:
<a aria-pressed="true" id="cke_9" class="cke_button_source cke_on" title="Источник" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_9_label" onblur="this.style.cssText = this.style.cssText;" onkeydown="return CKEDITOR.tools.callFunction(3, event);" onfocus="return CKEDITOR.tools.callFunction(4, event);" onclick="CKEDITOR.tools.callFunction(5, this); return false;">
				<span class="cke_icon"> </span>
				<span style="border-color: rgb(0, 0, 255); border-width: 2px; border-style: solid;" id="cke_9_label" class="cke_label">Источник</span>
				</a>

То есть сама кнопка Представлена тэгом <a>, в который вложены два <span>: для иконки и второй для надписи.

Все объекты удаётся поймать, но вот на посыл клика они не реагируют.

Код такой:

Код:
$oInputs = _IETagNameGetCollection ($rotator, "a")
   For $oInput In $oInputs
	  If StringInStr(_IEPropertyGet($oInput, "outerhtml"), "cke_9_label") Then
		 _IEAction($oInput,'click')
		 MsgBox(4096, "Object html", _IEPropertyGet($oInput, "outerhtml"))
	  EndIf
   Next


Пробовал разные варианты, пробовал ловить и span'ы -- всё ловится нормально. Отладочный MsgBox выдаёт html "пойманного" объекта, но вот на _IEAction($oInput,'click') они все плевать хотели. Не происходит ровным счётом ничего.

При этом iMacros для FireFox (если кто пользовался) отлавливает эту штуку очень легко:

Код:
TAG POS=1 TYPE=SPAN ATTR=ID:cke_9_label

и при запуске макроса прекрасно щёлкает на кнопку с достижением желаемого результата.

Кто может помочь?

Задача: щёлкнуть как-нибудь на эту кнопку, чтобы таки переключить режим редактора.

Вопросы:

1) Может, не с помощью _IEAction? Тогда как?
2) По идее в результате клика должен выполниться код CSS "CKEDITOR.tools.callFunction(5, this);", может кто подскажет, как принудительно AutoIt'ом его вызвать без кнопки?
3) Какие ещё мысли, что можно сделать?

Заранее спасибо!


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

P.S. Если делаю паузу в скрипте, чтобы навести мышку на кнопку, а потом скриптом выполняю MouseClick("LEFT"), то всё срабатывает.

Чем отличается MouseClick от _IEAction($...,'click')?


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

Спасибо всем за участие! Ларчик открывался просто, но не очевидно.

Помог поиск по заграницам: http://www.autoitscript.com/forum/topic/117510-ieaction-click-doesnt-fire-off-javascript-mousedown/

Соль в последовательности событий. Сработало в связке:

Код:
$oLink1.fireEvent("onmousedown")
$oLink1.fireEvent("onmouseup")
_IEAction($oLink1,'click')
 

bloname

Новичок
Сообщения
2
Репутация
0
а можешь полный код написать вместе с
Код:
$oLink1.fireEvent("onmousedown")
$oLink1.fireEvent("onmouseup")


?
 
Автор
S

sunbeam_2001

Новичок
Сообщения
11
Репутация
1
Чё-то на почту не приходят уведомления об ответах. Прости, что поздно:

Код:
$oLinks1 = _IELinkGetCollection($rotator)
   For $oLink1 In $oLinks1
	  If StringInStr(_IEPropertyGet($oLink1, "outerhtml"), "Источник") Then
		 $oLink1.fireEvent("onmousedown")
		 $oLink1.fireEvent("onmouseup")
		 _IEAction($oLink1,'click')
		 _IELoadWait($rotator)
		 ExitLoop
	  EndIf
   Next
 

Vylan

Новичок
Сообщения
6
Репутация
0
[Автоматизация] Re: [Автоматизация] Помогите кликнуть на хитрую кнопку под <span> с javascript

Не судите строго если не по теми но.
Помогите новичку. А то сам никак не освою.
На сайте http://mirkvartir.ua/offers/editlist
Надо нажать на кнопку "Обновить все"(большая зеленая галочка)

Код:
<span class="chk_all" onclick="chkAllNotice(this)" title="выбрать все"></span>

Логин: [email protected]
Пароль: vy123456
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


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

Vylan

Новичок
Сообщения
6
Репутация
0
Извините, думал что вопрос по теми.
Может кто подскажет где уже обсуждали подобную проблему?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Vylan,
Создайте новую тему.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
почему эта тема закреплена?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
Сам удивлён :blink:
Открепил.
 
Верх