Автозаполнение полей

Рейтинг: 0Ответов: 1Опубликовано: 10.05.2023

Есть внутренний ресурс, который постоянно мной заполняется в ручную, хотел автоматизировать через 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 заметил, что после заполнения определенного полня - страница обновляется

Ответы

▲ 0Принят

Как вариант, оформить функцию промисом с некой паузой. Вызовы делать в цепочке или как у меня в примере.

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)
}