#javascript #jquery #microsoft-forms
#javascript #jquery #microsoft-forms
Вопрос:
В моей компании есть форма Microsoft, которую я должен заполнять примерно 10 раз в месяц, но фактические данные формы, которые я ввожу, не сильно меняются. Для полей, которые не изменяются, я хочу иметь возможность заполнить их программно, вероятно, используя javascript. Используя расширение chrome «Пользовательский Javascript и CSS», я уже ввел javascript для размещения кнопки на странице, которую я могу нажать, чтобы заполнить, но когда я нажимаю «Отправить», форма не обнаруживает, что поля были заполнены.
Вот пример формы: https://forms.office.com/Pages/ResponsePage.aspx?id=A2isORETDk26ciZZHMzhJJh3e-CRp49LqjxXVoNyf99UQVZZTkdHS0ZVTkJHSDg5RE1VNkZDWVJPRS4u
Вот немного jquery для заполнения текстового поля
$('#form-container > div > div > div.office-form-content.office-form-page-padding > div > div.office-form.office-form-theme-shadow > div.office-form-body > div:nth-child(2) > div:nth-child(2) > div.office-form-question-content.office-form-theme-focus-border > div.office-form-question-element > div > div > div > input')[0].value = "hello"
Обратите внимание, что поле становится пустым и выдает ошибку проверки при нажатии кнопки «Отправить».
Как я могу заполнить эти поля программно таким образом, чтобы данные были получены формой?
Комментарии:
1. Я бы проверил, работает ли в этом случае автозаполнение .
2. Я внедрял JS с помощью Tampermonkey, но, похоже, они сделали подделку довольно сложной. У меня также не работали браузерные автозаполнители (расширения), они, вероятно, запускали события нажатия клавиш и т.д. Всеми теми же способами, которые я пытался сделать. В конечном итоге все получилось правильно с помощью настольного macro recorder. Не то, что я хотел, но, по крайней мере, мне не нужно каждый день заполнять одну и ту же форму, обещая, что у меня все еще нет ‘rona.
3. Спасибо, Шелдон! Я пытался использовать ранее предложенную утилиту, но тоже безрезультатно, наряду с некоторыми взломами javascript, и также не нашел подходящего способа сделать это.
Ответ №1:
Вам нужно проверить, какие прослушиватели событий имеют входные данные, которые вы хотите заполнить. Вы можете сделать это, получив доступ к инструментам разработчика вашего браузера (F12).
Перейдите на вкладку «Элементы» и выберите ввод. Вы увидите справа или ниже раздел, в котором есть вкладка «Прослушиватели событий». Здесь вы должны отключить опцию отображения прослушивателей событий предков.
Прослушиватель событий переключателя
Как вы можете видеть на изображении, при вводе типа radio происходит событие «изменить».
Вам нужно только отправить соответствующее событие после заполнения входных данных следующим образом:
const input = document.getElementsByClassName("Element selector");
const changeEvent = new Event("change"); //Create the event
input.checked = true; //Change input value
input.dispatchEvent(changeEvent); //Dispatch event
В случае ввода текста вам нужно отправить событие «input» точно так же, как это:
const input = document.getElementsByClassName("Element selector");
const inputEvent = new Event("input"); //Create the event
input.value = "New value"; //Change input value
input.dispatchEvent(inputEvent); //Dispatch event