Автозаполнение полей
Есть внутренний ресурс, который постоянно мной заполняется в ручную, хотел автоматизировать через Tampermonkey.
После заполнения определенного поля, часть страницы заполняется сама и из-за этого приходятся запускать их в два скрипта.
По структуре скрипты одинаковые, с разницей только в поиске полей, setTimeout() между вызовами auto_user не помогает.
GM_registerMenuCommand ("Запуск", start);
function auto_user(field, senceE1){
let dateTitle = document.querySelector(field);
if (dateTitle){
dateTitle.value = senceE1
}
console.log (senceE1);
dateTitle.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true }));
dateTitle.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true }));
dateTitle.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true }));
dateTitle.dispatchEvent(new Event('input', { bubbles: true }));
dateTitle.dispatchEvent(new Event('change', { bubbles: true }));
}
function start () {
'use strict';
let a = "123456789"
auto_user("input.ui-textbox-input.js-textbox.js-textbox",a)
}
Как можно сделать, что бы они отрабатывали одном?
Edit1: После варианта ksa заметил, что после заполнения определенного полня - страница обновляется
Ответы (1 шт):
Автор решения: ksa
→ Ссылка
Как вариант, оформить функцию промисом с некой паузой. Вызовы делать в цепочке или как у меня в примере.
function auto_user(field, senceE1){
return new Promise(res => {
let dateTitle = document.querySelector(field);
if (dateTitle){
dateTitle.value = senceE1
}
console.log (senceE1);
dateTitle.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true }));
dateTitle.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true }));
dateTitle.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true }));
dateTitle.dispatchEvent(new Event('input', { bubbles: true }));
dateTitle.dispatchEvent(new Event('change', { bubbles: true }));
// временную паузу подобрать чтобы скрипт успевал отработать
setTimeout(res, 1000)
})
}
async function start () {
'use strict';
let a = "123456789"
await auto_user("input.ui-textbox-input.js-textbox.js-textbox",a)
a = "98765432"
await auto_user("input.next",a)
}