Автор Тема: Поставить флаг в checkbox на сайте  (Прочитано 540 раз)

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

Оффлайн ProChelny [?]

  • Новичок
  • *
  • Сообщений: 2
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Добрый день. Есть сайт. Нужно получать с него отчеты о прохождении тестов пользователями.
Звучит всё достаточно просто:
Открыть страницу
Поставить флаги в несколько checkbox
В паре окон выбора указать значения
и нажать кнопку
Пока у меня код следующий.

Код: AutoIt [Выделить]
#include <IE.au3>
#include <StringConstants.au3>
#AutoIt3Wrapper_Run_Debug_Mode=Y

Local $oIE = _IECreate("https://riptib.ispringonline.ru/reports/generate/performance_summary",0,1,0,1)
While $oIE.Busy
WEnd
$doc = $oIE.document
; wait for it...
While $doc.ReadyState <> "complete"
WEnd

; выбрать все виды тестов
$oDiv1 = $doc.getElementById("itemSelectionCheckAllCheckboxContainer")
$oDiv1.checked = True
Sleep(1000)

; чекбокс "Скрыть неназначенных"
$oDiv2 = $doc.getElementById("excludeNotAssigned")
$oDiv2.checked = True
Sleep(1000)

; выводить отчет на этой странице ниже, а не на новой странице
$oDiv6 = $doc.getElementById("showReportBelow")
$oDiv6.checked = True
Sleep(1000)

Local $oButton = _IEGetObjById($oIE, "btnRunReport")
_IEAction($oButton, 'focus')
_IEAction($oButton, 'click')
_IELoadWait($oIE)

 


Но верно в нем отрабатывает только нажатие кнопки. Правда поскольку чекбоксом не выбран ни один тест, то выходит сообщение "выберите тесты по которым хотите увидеть оценки"
При этом "забавная ситуация": showReportBelow - это клетка "Показать отчет ниже", флаг в ней не появляется, но если после выполнения скрипта проставить все другие флаги (кроме этого), то отчет действительно выйдет ниже, так будто флаг в этой ячейке всё же стоит.


Куски кода с сайта:

тут фрагмент с чекбоксом, при нажатии на которую должны выделиться все тесты (программы обучения)
<div class="clear"></div>
</div><input type="hidden" id="showDeletedStateSaveUrl" value="/reports/show_deleted/update" />                    </div>
                                                    <div class="select_all_checkbox header_item">
                        <div id="itemSelectionCheckAllCheckboxContainer" class="no_top_margin checkbox_field_container">
    <div class="checkbox_holder">
        <input
          id="itemSelectionCheckAllCheckbox"
          data-form-field-id="itemSelectionCheckAllCheckbox"
          data-form-field-type="checkbox"
          data-form-field-error-type="no_error"
          data-form-field-error-container-id="itemSelectionCheckAllCheckbox"
          data-form-field-initial-value=""
          data-form-field-large-click-area="0"
          data-element-value="0"
          type="checkbox"
          name=""
          value="0"
          class="form_field checkbox_form_field"
          title=""
          autocomplete="off"
                            />
    </div>

тут фрагмент с чекбоксом "Скрыть неназначенных" и "Показать отчет ниже"
<div class="report_step_content generate_report">
      <div class="run_report_settings_container">
                        <span class="exclude_not_assigned">
  <input type="checkbox" class="checkbox" id="excludeNotAssigned" />
  <label for="excludeNotAssigned" class="active">Скрыть неназначенных</label>
</span>        <div class="show_report_below_container">
          <div id="showReportBelowContainer" class="with_label checkbox_field_container">
    <div class="checkbox_holder">
        <input
          id="showReportBelow"
          data-form-field-id="showReportBelow"
          data-form-field-type="checkbox"
          data-form-field-error-type="no_error"
          data-form-field-error-container-id="showReportBelow"
          data-form-field-initial-value=""
          data-form-field-large-click-area="0"
          data-element-value="0"
          type="checkbox"
          name=""
          value="0"
          class="form_field checkbox_form_field"
          title=""
          autocomplete="off"
                            />
    </div>
            <label title="Показать отчет ниже" id="showReportBelowLabel" class="active checkbox_field_label" for="showReportBelow">Показать отчет ниже</label>
                        <div class="clear"></div>
</div>        </div>
      </div>

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

И еще. Мне в примерах попадаются функции
_IEFormElementCheckBoxSelect
Но как я понял на том сайте нет блоков "Form"

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

Поставить флаг в checkbox на сайте
« Отправлен: Февраль 01, 2018, 08:26:47 »

Оффлайн ProChelny [?]

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

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Поставить флаг в checkbox на сайте
« Ответ #1, Отправлен: Февраль 02, 2018, 11:35:38 »
Не стал использовать AutoIt (каюсь - грешен)
Воспользовался дополнением для Chrome, под названием Wild Fire.
Там записал макрос за 2 минуты... и он нифига не сработал.
Пришлось один фиг дорабатывать напильником.

К чему я это пишу: на сайте был элемент "список выбора" (select)
и был он настолько злоеб**ий, что не было у него друзей и кучу нервов он мне пожрал.

Суть в том, что код JavaScript
document.getElementById("organizationSetting").options[0].selected = true
Нормально устанавливал значение в это поле (его id = "organizationSetting"), но форма на это не реагировала. И при дальнейшем формировании отчет выходи как-будто я ничего не выбирал.

для решения нужно было вызвать
document.getElementById("organizationSetting").dispatchEvent(new Event("change"));
То есть вызвать событие "change" для этого элемента select.
Скорее всего и для остальных чекбоксов (checkbox) нужно вызывать подобные события, но их можно "протыкать" эмуляцией нажатия мыши по точным координатам.

Для новичков:
Как понять, а какое же событие у элемента:
Открываете Chrome
F12
Справа появится консоль
вверху есть инока "квадратик со стрелкой", называется как-то "выделите элемент чтоб проинспектировать
вот свой элемент и инспектируйте
внизу перейдите во вкладку "Event Listeners"
снимите флаг с клетки "Ancestors"
при этом останутся только "нужные" события - в моем случае - мне показало что это "change"

Эти шаги избавили меня от перебора событий OnCange, OnClick, Click...

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

Re: Поставить флаг в checkbox на сайте
« Ответ #1 Отправлен: Февраль 02, 2018, 11:35:38 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
28 Ответов
8746 Просмотров
Последний ответ Апрель 29, 2010, 19:10:50
от bulldog5293
2 Ответов
2309 Просмотров
Последний ответ Сентябрь 25, 2011, 00:30:58
от agikon
2 Ответов
2963 Просмотров
Последний ответ Декабрь 06, 2012, 09:06:46
от Gzzk
1 Ответов
1675 Просмотров
Последний ответ Май 07, 2013, 17:18:44
от InnI
6 Ответов
4737 Просмотров
Последний ответ Октябрь 27, 2013, 00:45:39
от SHoCK13666
13 Ответов
2587 Просмотров
Последний ответ Июнь 02, 2014, 02:46:03
от Zalman1980
6 Ответов
1816 Просмотров
Последний ответ Ноябрь 22, 2014, 22:19:46
от WinDos32
2 Ответов
1892 Просмотров
Последний ответ Июль 01, 2015, 15:06:03
от madmasles
2 Ответов
1054 Просмотров
Последний ответ Июль 24, 2015, 11:24:34
от alex33
8 Ответов
2311 Просмотров
Последний ответ Июль 26, 2015, 20:58:16
от DanSaratov