Скрипты на JavaScript для Алиэкспресс

Тема закреплена бессрочно

Пользуетесь ли этими скриптами?

  • Да

    Голосов: 293 63,8%
  • Нет

    Голосов: 166 36,2%

  • Всего проголосовало
    459
Здравствуйте, а есть скрипт, который генерирует случайные данные карты и вставляет их в форму? нужно быстро оформлять заказы, а потом палкой буду оплачивать определённые товары.
 


Привет, Скрипт автозаполнения формы входа перестал разделять: логин (TAB) пароль.
Пробовал в Chrome и Firefox. Видимо снова изменились свойства полей.
Подредактировать нехватает скилла.
Я так понимаю, проблема только на ru. Обновил

Здравствуйте, а есть скрипт, который генерирует случайные данные карты и вставляет их в форму? нужно быстро оформлять заказы, а потом палкой буду оплачивать определённые товары.
Тык
 
Подскажите, какой последний скрипт, который использует твой пароль и главное, сам протягивает слайдер??
Все нормально работало, а теперь перестал, не могу понять почему.
Версия на .com

Спасибо
 
Подскажите, какой последний скрипт, который использует твой пароль и главное, сам протягивает слайдер??
Все нормально работало, а теперь перестал, не могу понять почему.
Версия на .com

Спасибо
А мне не подскажите??
 
  • Like
Реакции: rulyarulya
А как пользоваться то? Шаблоны не предлагает (причем шаблоны внеcены как в основной скрипт, так и в дополнильный "templates")

Или как отключается эта новая форма? На странице оформления такого нет
BA0Xelzt1GvZEA.jpg
 
А как пользоваться то? Шаблоны не предлагает (причем шаблоны внеcены как в основной скрипт, так и в дополнильный "templates")

Или как отключается эта новая форма? На странице оформления такого нет
BA0Xelzt1GvZEA.jpg
Посмотри шаблон-пример для ru
 
  • Like
Реакции: illich
Посмотри шаблон-пример для ru
Всё разобрался. Оказывается при включенном доп. скрипте с шаблонами он ничего не выводил, а старые мои шаблоны не подходили по синтаксису из-за этого не выводились (ключевая строка в шаблоне: ru: true). Спасибо
 
Последнее редактирование:
Может есть у кого подкорректированный Скрипт от Andronio перетаскивания слайдера при логине, а то слайдер перестал протягиваться автоматически.
Поделитесь пожалуйста.
 
  • Like
Реакции: VovikBull
Там еще и окно авторизации снова обновили для ру версии, теперь сначала вводится логин, жмется далее и только потом пароль, соответственно скрипт со вставкой формы логин:пароль не фурычит
Ну и клоуны у них там на разрабах...
 
Там еще и окно авторизации снова обновили для ру версии, теперь сначала вводится логин, жмется далее и только потом пароль, соответственно скрипт со вставкой формы логин:пароль не фурычит
Ну и клоуны у них там на разрабах...
Обновил
 
  • Like
Реакции: xavikz, arataki и AlS00
Можно, пожалуйста, этот обновить

Скрипт получения информации и треков
 
  • Like
Реакции: capunn
Скрипт для решения капчи (слайдер). Работает на 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');
})();
 
Скрипт для решения капчи (слайдер). Работает на 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');
})();
Спасибо. Если слайдер появляется - логинится после проъождения слайдера сразу, а если нет - надо Enter нажимать. Можно пофиксить? При разверке по смс идет автозаполнение автоматичнское левым номером телефона.
 
Последнее редактирование:
Спасибо. Если слайдер появляется - логинится после проъождения слайдера сразу, а если нет - надо Enter нажимать. Можно пофиксить? При разверке по смс идет автозаполнение автоматичнское левым номером телефона.
Этот скрипт никак не взаимодействует с формой входа, он только решает капчу внутри её iframe, остальное - руками или другими скриптами 🙃
 
  • Like
Реакции: Nesterakaone и AlS00
Ткните пожалуйста на принудительный редирект на com Перставил винду и не сохраний в файлик скрипт.
 
Не могли бы уважаемые скриптописатели сделать мини-скрипт под обезьяну для разбивки и проклика логин-пароля в мейлру форму входа через thirdparty?
Просто на нужной странице превращать вставку "логин;пароль" в "логин <далее> пароль <далее>" ?
 
подскажите есть скрипт для встройки кнопки "Добавить в корзину"? не на всех товарах есть данная кнопка, а только "Купить сейчас"
 
Скрипт для вставки логина:пароля на mail.ru

JavaScript:
// ==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);
})();
 
  • Like
Реакции: zx80, Andrey123m и AlS00