MI_PED_the_best
Флудер
Здравствуйте, а есть скрипт, который генерирует случайные данные карты и вставляет их в форму? нужно быстро оформлять заказы, а потом палкой буду оплачивать определённые товары.
Я так понимаю, проблема только на ru. ОбновилПривет, Скрипт автозаполнения формы входа перестал разделять: логин (TAB) пароль.
Пробовал в Chrome и Firefox. Видимо снова изменились свойства полей.
Подредактировать нехватает скилла.
ТыкЗдравствуйте, а есть скрипт, который генерирует случайные данные карты и вставляет их в форму? нужно быстро оформлять заказы, а потом палкой буду оплачивать определённые товары.
Добрый день. Не обновляли ещё?Обновлю заполнялку под ru
Вчера обновилДобрый день. Не обновляли ещё?
А мне не подскажите??Подскажите, какой последний скрипт, который использует твой пароль и главное, сам протягивает слайдер??
Все нормально работало, а теперь перестал, не могу понять почему.
Версия на .com
Спасибо
А как пользоваться то? Шаблоны не предлагает (причем шаблоны внеcены как в основной скрипт, так и в дополнильный "templates")
Посмотри шаблон-пример для ruА как пользоваться то? Шаблоны не предлагает (причем шаблоны внеcены как в основной скрипт, так и в дополнильный "templates")
Или как отключается эта новая форма? На странице оформления такого нет
Всё разобрался. Оказывается при включенном доп. скрипте с шаблонами он ничего не выводил, а старые мои шаблоны не подходили по синтаксису из-за этого не выводились (ключевая строка в шаблоне: ru: true). СпасибоПосмотри шаблон-пример для ru
ОбновилТам еще и окно авторизации снова обновили для ру версии, теперь сначала вводится логин, жмется далее и только потом пароль, соответственно скрипт со вставкой формы логин:пароль не фурычит
Ну и клоуны у них там на разрабах...
// ==UserScript==
// @name AliExpress Captcha Solver
// @description Решает капчу
// @author longnull
// @namespace longnull
// @version 1.0
// @updateURL https://gist.github.com/longnull/827b6f4829355fdbe7f0e573bf75f850/raw/AliExpressCaptchaSolver.user.js
// @downloadURL https://gist.github.com/longnull/827b6f4829355fdbe7f0e573bf75f850/raw/AliExpressCaptchaSolver.user.js
// @match https://*.aliexpress.com/*/_____tmd_____/punish*
// @match https://*.aliexpress.ru/*/_____tmd_____/punish*
// @grant none
// ==/UserScript==
(async () => {
'use strict';
const waitForElement = (selectors, waitForExistence = true, visible = false, parent = document, interval = 250, seconds = 0) => {
const isVisible = (e) => {
return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length);
};
return new Promise((resolve) => {
if (!Array.isArray(selectors)) {
selectors = [selectors];
}
seconds = seconds * 1000;
const startTime = Date.now();
const check = () => {
let found = true;
let el;
for (const s of selectors) {
el = parent.querySelector(s);
if ((waitForExistence && (!el || (visible && !isVisible(el)))) || (!waitForExistence && el)) {
found = false;
break;
}
}
if (found) {
return resolve(el);
}
if (seconds > 0 && Date.now() - startTime > seconds) {
return resolve(false);
}
setTimeout(check, interval);
};
check();
});
};
const sleep = async (ms) => {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
};
const randomRange = (min, max) => {
return Math.floor(Math.random() * (max + 1 - min)) + min;
};
const sendMouseEvent = (x, y, element, eventType) => {
const event = document.createEvent('MouseEvents');
event.initMouseEvent(eventType, true, true, window, 1, x, y, x, y, false, false, false, false, 0, null);
element.dispatchEvent(event);
}
const slider = await waitForElement('#nc_1_n1z');
const sliderRect = slider.getBoundingClientRect();
const sliderWrapperRect = document.querySelector('#nc_1_wrapper').getBoundingClientRect();
const startX = sliderRect.x + sliderRect.width / 2;
const endX = startX + sliderWrapperRect.width - sliderRect.width;
const posY = sliderRect.y + sliderRect.width / 2;
let posX = startX;
sendMouseEvent(startX, posY, slider, 'mousedown');
while (posX < endX) {
await sleep(randomRange(2, 10));
const move = randomRange(4, 10);
sendMouseEvent(posX + move, posY, slider, 'mousemove');
posX += move;
}
sendMouseEvent(sliderRect.x + sliderRect.width + sliderWrapperRect.width, sliderRect.y + sliderRect.height / 2, slider, 'mouseup');
})();
Спасибо. Если слайдер появляется - логинится после проъождения слайдера сразу, а если нет - надо Enter нажимать. Можно пофиксить? При разверке по смс идет автозаполнение автоматичнское левым номером телефона.Скрипт для решения капчи (слайдер). Работает на com и ru, решает при входе и при заказе, скорее всего, будет решать и в других местах.
На гитхабе
Или
JavaScript:// ==UserScript== // @name AliExpress Captcha Solver // @description Решает капчу // @author longnull // @namespace longnull // @version 1.0 // @updateURL https://gist.github.com/longnull/827b6f4829355fdbe7f0e573bf75f850/raw/AliExpressCaptchaSolver.user.js // @downloadURL https://gist.github.com/longnull/827b6f4829355fdbe7f0e573bf75f850/raw/AliExpressCaptchaSolver.user.js // @match https://*.aliexpress.com/*/_____tmd_____/punish* // @match https://*.aliexpress.ru/*/_____tmd_____/punish* // @grant none // ==/UserScript== (async () => { 'use strict'; const waitForElement = (selectors, waitForExistence = true, visible = false, parent = document, interval = 250, seconds = 0) => { const isVisible = (e) => { return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length); }; return new Promise((resolve) => { if (!Array.isArray(selectors)) { selectors = [selectors]; } seconds = seconds * 1000; const startTime = Date.now(); const check = () => { let found = true; let el; for (const s of selectors) { el = parent.querySelector(s); if ((waitForExistence && (!el || (visible && !isVisible(el)))) || (!waitForExistence && el)) { found = false; break; } } if (found) { return resolve(el); } if (seconds > 0 && Date.now() - startTime > seconds) { return resolve(false); } setTimeout(check, interval); }; check(); }); }; const sleep = async (ms) => { return new Promise((resolve) => { setTimeout(resolve, ms); }); }; const randomRange = (min, max) => { return Math.floor(Math.random() * (max + 1 - min)) + min; }; const sendMouseEvent = (x, y, element, eventType) => { const event = document.createEvent('MouseEvents'); event.initMouseEvent(eventType, true, true, window, 1, x, y, x, y, false, false, false, false, 0, null); element.dispatchEvent(event); } const slider = await waitForElement('#nc_1_n1z'); const sliderRect = slider.getBoundingClientRect(); const sliderWrapperRect = document.querySelector('#nc_1_wrapper').getBoundingClientRect(); const startX = sliderRect.x + sliderRect.width / 2; const endX = startX + sliderWrapperRect.width - sliderRect.width; const posY = sliderRect.y + sliderRect.width / 2; let posX = startX; sendMouseEvent(startX, posY, slider, 'mousedown'); while (posX < endX) { await sleep(randomRange(2, 10)); const move = randomRange(4, 10); sendMouseEvent(posX + move, posY, slider, 'mousemove'); posX += move; } sendMouseEvent(sliderRect.x + sliderRect.width + sliderWrapperRect.width, sliderRect.y + sliderRect.height / 2, slider, 'mouseup'); })();
Этот скрипт никак не взаимодействует с формой входа, он только решает капчу внутри её iframe, остальное - руками или другими скриптамиСпасибо. Если слайдер появляется - логинится после проъождения слайдера сразу, а если нет - надо Enter нажимать. Можно пофиксить? При разверке по смс идет автозаполнение автоматичнское левым номером телефона.
// ==UserScript==
// @name Mail.ru User Paste
// @description Позволяет вставлять в форму входа логин и пароль одновременно
// @author longnull
// @namespace longnull
// @version 1.0
// @match https://*.mail.ru/*
// @grant none
// ==/UserScript==
(() => {
'use strict';
////////////////////////////////////////////////////////////
// Настройки
////////////////////////////////////////////////////////////
const config = {
// Один пароль для всех аккаунтов
onePasswordForAllAccounts: '',
// true - Нажать кнопку для входа
// false - Не нажимать
submit: true
};
////////////////////////////////////////////////////////////
const forms = [
{login: 'input[name="username"]', pass: 'input[name="password"]', next: '.login-row .submit-button-wrap button', submit: '.login-row .submit-button-wrap button'},
];
const sleep = async (ms) => {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
};
const waitForElement = (selectors, waitForExistence = true, visible = false, parent = document, interval = 250, seconds = 0) => {
const isVisible = (e) => {
return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length);
};
return new Promise((resolve) => {
if (!Array.isArray(selectors)) {
selectors = [selectors];
}
seconds = seconds * 1000;
const startTime = Date.now();
const check = () => {
let found = true;
let el;
for (const s of selectors) {
el = parent.querySelector(s);
if ((waitForExistence && (!el || (visible && !isVisible(el)))) || (!waitForExistence && el)) {
found = false;
break;
}
}
if (found) {
return resolve(el);
}
if (seconds > 0 && Date.now() - startTime > seconds) {
return resolve(false);
}
setTimeout(check, interval);
};
check();
});
};
const setInput = (input, value) => {
if (typeof input === 'string') {
input = document.querySelector(input);
}
if (!input) {
return;
}
input.value = value;
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value').set.call(input, value);
let props = Object.keys(input).filter((i) => i.indexOf('__reactEventHandlers') >= 0);
if (!props.length) {
props = Object.keys(input).filter((i) => i.indexOf('__reactProps') >= 0);
}
if (props.length) {
if (input[props[0]].onChange) {
input[props[0]].onChange({target: {value: input.value}});
}
if (input[props[0]].onKeyDown) {
input[props[0]].onKeyDown({target: {value: input.value}});
}
}
input.dispatchEvent(new Event('input', {bubbles: true}));
input.dispatchEvent(new Event('change', {bubbles: true}));
input.dispatchEvent(new Event('keyup', {bubbles: true}));
input.dispatchEvent(new Event('keydown', {bubbles: true}));
input.dispatchEvent(new Event('keypress', {bubbles: true}));
input.dispatchEvent(new Event('input', {bubbles: true}));
input.dispatchEvent(new Event('blur', {bubbles: true}));
};
setInterval(() => {
for (const f of forms) {
if (f.listen) {
continue;
}
const elLogin = document.querySelector(f.login);
if (!elLogin) {
continue;
}
let elPass;
let elNext;
let elSubmit;
if (f.next) {
elNext = document.querySelector(f.next);
if (!elNext) {
continue;
}
} else {
elPass = document.querySelector(f.pass);
elSubmit = document.querySelector(f.submit);
if (!elPass || (config.submit && !elSubmit)) {
continue;
}
}
const listener = async (event) => {
const text = (event.clipboardData || window.clipboardData).getData('text').trim();
const match = text.match(config.onePasswordForAllAccounts ? /([^\s:;]+)/ : /([^\s:;]+)[\s:;]+([^\s:;]+)/);
if (match) {
event.preventDefault();
setInput(elLogin, match[1]);
if (f.next) {
elNext.click();
await waitForElement(f.pass);
elPass = document.querySelector(f.pass);
elSubmit = document.querySelector(f.submit);
}
setInput(elPass, config.onePasswordForAllAccounts ? config.onePasswordForAllAccounts : match[2]);
if (config.submit) {
await sleep(200);
elSubmit.click();
}
}
};
elLogin.addEventListener('paste', listener);
if (!f.next) {
elPass.addEventListener('paste', listener);
}
f.listen = true;
}
}, 500);
})();