@Gansterito

Как корректно кликать по формам JQuery?

Добрый день.

Встала задача автозаполнения форм. Можно сказать скоростного автозаполнения. Этакая специальная дисциплина...

Формы - обычные заявки, куда нужно ввести кучу реквизитов, поставить пару десятков галочек в чекбоксах и т.д. Все это дело запилено через JQuery.

Сделал на базе Python + Selenium. Работает медленно, чуть медленнее, чем вручную. Есть куда оптимизировать, но все равно связка работает долго.

Решил попробовать сделать на JS, который через консоль в виде скрипта инжектируется в тело страницы, после чего выполняет нужные заполнения. Здесь и возникли проблемы - если поставить галочку на INPUT-е не составляет проблем (все работает на ура), то заполнить поле из выпадающего списка на JS не получается совсем.

Через Selenium это делалось просто - ищем нужный элемент, кликаем на нем, в дереве DOM динамически подгружаются новые элементы, ищем нужный, кликаем на нем. Всё. Результат визуально отображается в браузере.

Через JS клик не работает. Есть подозрение, что JQuery сам выступает диспетчером событий, программный клик по контролам его не устраивает и эти события он игнорирует. Пробовал перед кликом делать фокус - не помогает. Отслеживал в отладчике браузеров (FF, Chrome) последовательности эвентов при ручном клике, программно делал 1-в-1, без толку.

Подскажите, есть ли какие-то шансы средствами JS реализовать эмуляцию кликов и заполнений форм?
  • Вопрос задан
  • 59 просмотров
Решения вопроса 2
@zkrvndm
Софт для автоматизации
Если вызываете на элементе событие, то делайте его всплывающим. Например, после ввода текста в поле:
input = document.querySelector('input');

input.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true }));
input.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true }));
input.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true }));
input.dispatchEvent(new InputEvent('input', { bubbles: true }));
input.dispatchEvent(new InputEvent('change', { bubbles: true }));

Современные фреймворки они не следят за событиями на элементе, они следят за событиями на родителях этих элементов, поэтому чтобы сработали обработчики на странице, надо события делать всплывающими.
Ответ написан
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
тебе не click нужен, а input и/или change
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы