Автор Тема: Работа с модальным окном simplemodal jquery  (Прочитано 1017 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн randal [?]

  • Новичок
  • *
  • Сообщений: 10
  • Репутация: 2
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Долго пытал форум, но нашёл только как нажимать на кнопки в таких окнах, а считывание текста внутри почему-то нет :(
В общем, стоит задача определять наличие такого окна, считывать из него текст (содержимое бывает разное) и жать на кнопки в зависимости от результата
Готовый рецепт не прошу, хотя бы подскажите сам принцип взаимодействия :-[
Вид окна во вложении, открыто в инспекторе кода Оперы. Сам код:
<div id="result-dialog" class="messenger hidden simplemodal-data" style="display: block;">
<p id="betresult">Ваша ставка принята, спасибо</p>
<div id="detail-result" class="detail-result hidden" style="display: none;">
<p id="detail-result-content"></p>
<div id="deposit-msg" class="deposit-msg hidden" style="display: none;">
<p>Пожалуйста, используйте ссылку <button type="submit" class="button yes simplemodal-close" onclick="location.href = '/su/deposit.htm'"><span>Внести средства</span></button>, чтобы пополнить баланс.</p>
</div>
</div>
<div class="buttons messenger-but">
<button type="submit" id="ok-button" class="button no simplemodal-close" style="display: inline-block;"><span>OK</span></button>
<button type="submit" id="print-bet" class="button no simplemodal-close" style="display: inline-block;">
<span>Распечатать</span>
</button>
<button type="submit" id="deposit-button" class="button yes simplemodal-close hidden" onclick="location.href = '/su/deposit.htm'" style="display: none;"><span>Внести средства</span></button>

<button type="submit" id="cancel-button" class="button btn-cancel no simplemodal-close hidden" style="display: none;"><span>Отказаться</span></button>
<button type="submit" id="place-changed-terms" class="button no simplemodal-close hidden" style="display: none;"><span>Сделать ставку с изменившимися условиями</span></button>
<button type="submit" id="place-amended-stake" class="button no simplemodal-close hidden" style="display: none;"><span>Сделать ставку с изменившимися условиями</span></button>
</div>
</div>
« Последнее редактирование: Апрель 27, 2018, 01:43:46 от randal, Причина: исправил картинку »

Русское сообщество AutoIt

Работа с модальным окном simplemodal jquery
« Отправлен: Апрель 27, 2018, 00:24:30 »

Помечен как лучший ответ пользователем randal Отправлен Май 11, 2018, 18:12:07

Оффлайн gunter123 [?]

  • Осваивающий
  • **
  • Сообщений: 109
  • Репутация: 40
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Работа с модальным окном simplemodal jquery
« Ответ #1, Отправлен: Апрель 27, 2018, 09:41:19 »
Как-то так:
Код: AutoIt [Выделить]
#include <IE.au3>

$oIE = _IEAttach('', 'instance')                        ; Цепляется к окну IE (в нем у меня уже открыта страница с этим исходным кодом)
$oDiv = $oIE.document.getElementById('result-dialog')   ; Взять элемент с ID result-dialog
If Not IsObj($oDiv) Then Exit                           ; Если такого элемента нет, выходим
MsgBox(4096, "", $oDiv.innertext)                       ; Показать весь текст внутри этого div`а. Так можно проверять наличие нужного текста

$oButton = $oDiv.document.getElementById('ok-button')   ; Возвращает элемент с ID ok-button внутри этого div`а
MsgBox(4096, $oButton.id, $oButton.innertext)           ; ---ОК

$oElements = $oDiv.getElementsByTagName('*')            ; Возвращает всю колекцию элементов внутри div`а. Вместо * можно указать название тега
For $oElement In $oElements                             ; Для каждого элемента в коллекции...
   ConsoleWrite(' - ID: ' & $oElement.id & @CRLF)
   ConsoleWrite(' - Текст: ' & $oElement.innertext & @CRLF)        ; Записать в консоль ID, текст и html внутри элемента
   ConsoleWrite(' - HTML:' & $oElement.innerhtml & @CRLF & ' --- ' & @CRLF)
Next

If StringInStr($oDiv.innertext, 'Ваша ставка принята') Then    ; Если есть текст "Ваша ставка принята"
   $oButton = $oDiv.document.getElementById('ok-button')       ; Кликнуть по кнопке OK
   $oButton.focus()
   $oButton.click()
EndIf
 

Is it future or is it past?

Оффлайн randal [?]

  • Новичок
  • *
  • Сообщений: 10

  • Автор темы
  • Репутация: 2
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Работа с модальным окном simplemodal jquery
« Ответ #2, Отправлен: Май 11, 2018, 18:24:18 »
gunter123
Спасибо, очень помогли. Документация по языку довольно скудная :( Изначально ввело в заблуждение то, что через  _IEDocReadHTML динамические объекты не видны, поэтому думал что к ним нужно как-то по-хитрому обращаться. Оказалось всё проще :)
Кстати, если вдруг кто-то ещё столкнётся с simplemodal, то активное окно (которое отображается) имеет класс "messenger hidden simplemodal-data", соответственно проверку на наличие любого окна лучше делать через поиск этого класса:

Код: AutoIt [Выделить]
$oDiv = $oIE.document.getElementsByClassName('messenger hidden simplemodal-data')
If $oDiv.length > 0 Then ...  ; как только такой элемент найдётся, длина массива станет больше 0. Проверка через IsObj($oDiv) почему-то не работает
; обрабатываем событие (читаем окно и т.д)
EndIf


Русское сообщество AutoIt

Re: Работа с модальным окном simplemodal jquery
« Ответ #2 Отправлен: Май 11, 2018, 18:24:18 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
51 Ответов
42302 Просмотров
Последний ответ Июль 29, 2016, 13:45:27
от masheen
0 Ответов
1144 Просмотров
Последний ответ Январь 23, 2014, 09:17:12
от madmasles
3 Ответов
1353 Просмотров
Последний ответ Март 02, 2015, 17:46:56
от InnI
2 Ответов
1655 Просмотров
Последний ответ Май 23, 2015, 11:08:42
от alex33
6 Ответов
1955 Просмотров
Последний ответ Июнь 29, 2015, 17:28:40
от madmasles
2 Ответов
1210 Просмотров
Последний ответ Август 04, 2015, 11:27:12
от joiner
5 Ответов
1303 Просмотров
Последний ответ Сентябрь 06, 2015, 15:49:19
от madmasles
0 Ответов
928 Просмотров
Последний ответ Ноябрь 10, 2015, 18:36:34
от ason
3 Ответов
7697 Просмотров
Последний ответ Август 01, 2016, 11:01:37
от ankaPt
16 Ответов
2804 Просмотров
Последний ответ Октябрь 25, 2017, 20:00:27
от dr.room