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

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

  • Да

    Голосов: 96 64,0%
  • Нет

    Голосов: 54 36,0%

  • Всего проголосовало
    150

Andronio

Король флуда
Дней с нами
992
Репутация
46
Розыгрыши
0
Сообщения
473
Лайки
1.934

SnegovikRZN

Участник
Дней с нами
682
Репутация
0
Розыгрыши
0
Сообщения
23
Лайки
5

L&M

Любитель трепать не по делу
Дней с нами
996
Репутация
14
Розыгрыши
0
Сообщения
1.952
Лайки
2.281
Подскажите, в чем может быть проблема, почему скрипт логинится по кругу бесконечо ? Захожу через страницу https://skidka.ru/user/auth/, скрипт логинится, доходит до главной страницы, куда то переходит и выскакивает окно с кнопками ВХОД и ОТМЕНА, проходит пару сек и опять открываетя страница для ввода логина пароли и так по кругу. Заметил что иногда всетаки скрипт срабатывает, доводя до главной страницы АЛИ, но это прим 2 из 10 раз. Подскажите, куда копать , Спасибо.
Такая же засада в файрефоксе.
Происходит вход в акк скидки, затем выход, следом переход на https://skidka.ru/user/goto/72/ и там снова вход. И так по кругу.
Тайминги на 2000 не помогают.
 
Последнее редактирование:

dbkpz

Знающий
Дней с нами
519
Репутация
0
Розыгрыши
0
Сообщения
161
Лайки
28
для игры есть скрипт?
 

Andronio

Король флуда
Дней с нами
992
Репутация
46
Розыгрыши
0
Сообщения
473
Лайки
1.934
Подправил скрипт для форума Miped для скрытия сообщений с картинками. Теперь смайлики не считает.

Ссылка на гитхаб
 

jam

Знающий
Дней с нами
488
Репутация
0
Розыгрыши
0
Сообщения
81
Лайки
36
Ну вот здесь же все расписано с картинками.
---------Двойное сообщение соединено: ---------
Код:
// ==UserScript==
// @name         Aliexpress Order info getter track
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Получение информации из заказа и трека
// @author       Andronio
// @match        https://trade.aliexpress.ru/orderList.htm*
// @match        https://trade.aliexpress.ru/order_list.htm*
// @match        https://trade.aliexpress.com/orderList.htm*
// @match        https://trade.aliexpress.com/order_list.htm*
// @noframes
// ==/UserScript==
/*
prodName  - Название товара
picURL    - URL-ссылка на картинку-превью товара
prodPrice - Цена товара
today     - Сегодняшняя дата
orderNum  - Номер заказа
\t        - Табуляция, переход к следующей ячейке
picPrefix - 1 - добавлять префик picURL= для адреса картинки, 0 - не добавлять
track     - Трек-номер заказа
date      - Дата автозакрытия заказа
Строка должна начинаться и заканчиваться символом обратной кавычки
*/
var orderStr  = `prodName + '\t' + picURL + '\t' + prodPrice + '\t' + today +  '\t' + orderNum`;
var trackStr  = `track + '\t' + date`;
let picPrefix = 1;
/*
Далее не трогать
*/
let ordersMass = [];
let trackMass = [];
(function () {
    'use strict';
// Рисуем окно с кнопками
    var div = document.createElement('div');
    div.className = 'mybox';
    let product = document.querySelectorAll('.order-item-wraper');
    let hasTrackable = false;
    if (product.length == 0) {
        div.innerHTML = '<p class="noorders">Нет заказов</p>';
    } else {
        let str = document.body.innerHTML.split("var appealInfoParams = encodeURIComponent('")[1].split("');")[0];
        if (str.match(/\[(\{("\w+":["\w]+,)+"\w+":["\w]+\},){0,30}\{("\w+":["\w]+,)+"\w+":["\w]+\}\]/g)) {
            ordersMass = eval(str);
            ordersMass.forEach(order => {
                if (order.orderStatus == "WAIT_BUYER_ACCEPT_GOODS") {
                    hasTrackable = true;
                }
            });
        }
        div.innerHTML = `<button class="infoGetter" myattr="-1">Все заказы</button>`;
        if (hasTrackable) div.innerHTML +=`<button class="trackGetter" myattr="99" disabled>Треки</button>`;
        for (let i = 0; i < product.length; i++) {
            let productName = product[i].querySelectorAll(".product-title > a.baobei-name")[0].getAttribute("title").substr(0,20);
            div.innerHTML += `<br><button class="infoGetter" myattr="${i}">${i+1} - <span style="color:green">${productName}</span></button>`;
            if (hasTrackable && ordersMass[i].orderStatus == 'WAIT_BUYER_ACCEPT_GOODS')
                div.innerHTML += `<button class="trackGetter" myattr="${i+100}" disabled>Трек</button>`;
        }
    }
    document.body.append(div);
    var styles = `
    .mybox {
    position: fixed;
    top: 0;
    right: 0;
    background: white;
    box-shadow: 1px -1px 4px 1px;
    max-width: 40%;
    max-height: 400px;
    padding: 10px 10px;
    overflow-y: auto;
    overflow-x: hidden;
    z-index:9999;
    }
    .noorders {
    color: red;
    text-align: center;
    font-size: 1.5em;
    padding: 5px;
    margin: 0;
    }
    .infoGetter {
    display: inline;
    margin-right:auto;
    margin-top: 2px;
    cursor:pointer;
    padding: 5px;
    width: 180px;
    text-align: left;
    }
    .trackGetter {
    display: inline;
    margin-right:auto;
    margin-top: 2px;
    cursor:pointer;
    padding: 5px;
    width: 46px;
    text-align: left;
    }
    .greenbutton{
    background-color: LightGreen;
    }`
    var styleSheet = document.createElement("style")
    styleSheet.type = "text/css"
    styleSheet.innerText = styles
    document.head.append(styleSheet)
    div.addEventListener('click', buttonClick);
    if (hasTrackable) getTracks();
})();
function buttonClick(event) {
    let elem = event.target;
    if (elem.tagName != "BUTTON") {
        elem = elem.parentNode;
        if (elem.tagName != "BUTTON") return;
    }
    let orderString;
    let num = +elem.getAttribute('myattr');
    if (num > 98) return trackBuff(num, elem);
    else {
        let product = document.querySelectorAll('.order-item-wraper');
        let productPrice = document.querySelectorAll(".amount-num");
        let orderNumber = document.querySelectorAll(".order-info > .first-row > span.info-body");
        let today = formatDate();
        let prodName, prodPrice, orderNum;
        if (num > -1) {
            // один заказ
            let productName = product[num].querySelectorAll(".product-title > a.baobei-name");
            let picURL = product[num].querySelectorAll(".pic.s50 > img")[0].src;
            if (picPrefix) picURL = "picURL=" + picURL;
            prodName = `=ГИПЕРССЫЛКА("https:\/\/www.aliexpress.ru\/item\/${productName[0].getAttribute("productid")}.html";` +
                `"${productName[0].getAttribute("title").substr(0,80)}")`;
            prodPrice = productPrice[num].innerText.match(/\d+\.\d+/);
            if (prodPrice)
                prodPrice = prodPrice[0].replace(/\./,",");
            else
                prodPrice = productPrice[num].innerText.trim();
            orderNum = orderNumber[num].innerText;
            orderString = eval(orderStr);
        } else {
            // много заказов
            orderString = "";
            for (let num = 0; num < orderNumber.length; num++) {
                let productName = product[num].querySelectorAll(".product-title > a.baobei-name");
                let picURL = product[num].querySelectorAll(".pic.s50 > img")[0].src;
                if (picPrefix) picURL = "picURL=" + picURL;
                prodName = `=ГИПЕРССЫЛКА("https:\/\/www.aliexpress.ru\/item\/${productName[0].getAttribute("productid")}.html";` +
                    `"${productName[0].getAttribute("title").substr(0,80)}")`;
                prodPrice = productPrice[num].innerText.match(/\d+\.\d+/);
                if (prodPrice)
                    prodPrice = prodPrice[0].replace(/\./,",");
                else
                    prodPrice = productPrice[num].innerText.trim();
                orderNum = orderNumber[num].innerText;
                orderString += eval(orderStr);
                orderString += "\r\n";
            }
        }
    }
    navigator.clipboard.writeText(orderString).then(function () {
        console.log('Async: Copying to clipboard was successful!');
        window.mybtn = elem;
        window.mybtn.classList.add("greenbutton");
        setTimeout(() => window.mybtn.classList.remove("greenbutton"), 500);
    }, function (err) {
        console.error('Async: Could not copy text: ', err);
    });
}
function trackBuff(num, elem){
    num -= 100;
    let date, track, orderString = "";
    let trackMassCopy = trackMass.slice();
    if (num > -1) {
        let el = trackMassCopy.find(index => index.id == ordersMass[num].id);
        date = el.date;
        track = el.track;
        orderString = eval(trackStr);
    } else {
        for (let i = 0; i < ordersMass.length; i++) {
            if (ordersMass[i].orderStatus == "WAIT_BUYER_ACCEPT_GOODS") {
                let el = trackMassCopy.shift();
                date = el.date;
                track = el.track;
                orderString += eval(trackStr);
            }
            orderString += "\r\n";
        }
    }
    navigator.clipboard.writeText(orderString).then(function () {
        console.log('Async: Copying to clipboard was successful!');
        window.mybtn = elem;
        window.mybtn.classList.add("greenbutton");
        setTimeout(() => window.mybtn.classList.remove("greenbutton"), 500);
    }, function (err) {
        console.error('Async: Could not copy text: ', err);
    });
}
function getTracks() {
    ordersMass.forEach(order => {
        if (order.orderStatus == "WAIT_BUYER_ACCEPT_GOODS") {
            trackMass.push({id: order.id, track: "", date: ""});
        }
    });
    let requests = trackMass.map(order => fetch(`${location.protocol}//${location.hostname}/order_detail.htm?orderId=${order.id}`));
    Promise.all(requests)
        .then(responses => Promise.all(responses.map(r => r.text())))
        .then(texts => {
            for (let i = 0; i < texts.length; i++) {
                let obj = document.createElement('html');
                obj.innerHTML = texts[i];
                let track = obj.querySelector(".flush-btn").getAttribute("logisticsNo");
                let date = obj.querySelector('.order-reminder');
                if (!track || !date) return alert("Не получил информацию о заказе");
                date = date.innerText.match(/\d{4}-\d\d-\d\d/g);
                if (date.length > 0) date = date[0].replace(/\d\d(\d\d)-(\d\d)-(\d\d)/, '$3.$2.$1');
                else return alert("Не правильная дата в заказе");
                trackMass[i].track = track;
                trackMass[i].date = date;
            }
            document.querySelectorAll(".trackGetter").forEach(elem => elem.removeAttribute("disabled"));
        })
        .catch(err => alert(`Ошибка ${err}`));
}
function formatDate() {
    let date = new Date();
    let dd = date.getDate();
    if (dd < 10)
        dd = '0' + dd;
    let mm = date.getMonth() + 1;
    if (mm < 10)
        mm = '0' + mm;
    let yy = date.getFullYear() % 100;
    if (yy < 10)
        yy = '0' + yy;
    return dd + '.' + mm + '.' + yy;
}
а можно сделать чтобы кнопка "все треки и вся инфа" переворачивала список наоборот? Объясню зачем - в таблицу вставлять удобнее сверху вниз, а в ЛК али наоборот.
 

Andronio

Король флуда
Дней с нами
992
Репутация
46
Розыгрыши
0
Сообщения
473
Лайки
1.934
а можно сделать чтобы кнопка "все треки и вся инфа" переворачивала список наоборот? Объясню зачем - в таблицу вставлять удобнее сверху вниз, а в ЛК али наоборот.
Я не понял где там и что наоборот. Заказы и треки копируются в буфер строго по списку али.
 
  • Like
Лайки: jam

jam

Знающий
Дней с нами
488
Репутация
0
Розыгрыши
0
Сообщения
81
Лайки
36
Я не понял где там и что наоборот. Заказы и треки копируются в буфер строго по списку али.
да, конечно, но в таблицы (sheets/excel, etc) удобнее вставлять сверху вниз.

Например есть большой личный аккаунт, там 10 покупок, мы экспортируем данные как на али (сверху новые, снизу старые), вставляем в таблицу сбора. В итоге когда будет 11й заказ то при эксорте всей пачки либо все заново в таблицу заводить либо этот 11й заказ в таблице будет снизу, а на али - сверху. Хоть немного понятно объяснил)?
---------Двойное сообщение соединено: ---------
ведем таблицу, вытаскиваем 2 заказа с али, по порядку оно будет так:

на али:
1новый
2старый

а в таблице:
1старый
2новый

добавлять обновления неудобно из-за того что на али новый будет над 1, а в таблицу он должен лечь как 3.
 

Andronio

Король флуда
Дней с нами
992
Репутация
46
Розыгрыши
0
Сообщения
473
Лайки
1.934
да, конечно, но в таблицы (sheets/excel, etc) удобнее вставлять сверху вниз.

Например есть большой личный аккаунт, там 10 покупок, мы экспортируем данные как на али (сверху новые, снизу старые), вставляем в таблицу сбора. В итоге когда будет 11й заказ то при эксорте всей пачки либо все заново в таблицу заводить либо этот 11й заказ в таблице будет снизу, а на али - сверху. Хоть немного понятно объяснил)?
Зачем на личном аккаунте вести какие-то таблицы? Этот скрипт для абузеров с кучей аккаунтов и одним-двумя товарами на акке.
 
  • Like
Лайки: edwardfreedom и jam

jam

Знающий
Дней с нами
488
Репутация
0
Розыгрыши
0
Сообщения
81
Лайки
36
пусть будет так, спс)
 

Andronio

Король флуда
Дней с нами
992
Репутация
46
Розыгрыши
0
Сообщения
473
Лайки
1.934
добавлять обновления неудобно из-за того что на али новый будет над 1, а в таблицу он должен лечь как 3.
Нажми на кнопку самого товара, а не все, тогда скопируется информация только об этом заказе и вставь хоть перед, хоть в конце.
 
  • Like
Лайки: jam

hetol

Знающий
Дней с нами
1.086
Репутация
0
Розыгрыши
0
Сообщения
167
Лайки
157
Скрипт смены страны и валюты при нажатии на флаг россии постоянно ставит страну казахстан, как то это можно изменить?)
 

VovikBull

Активный участник
Дней с нами
1.312
Репутация
0
Розыгрыши
0
Сообщения
55
Лайки
10
А вдруг мою просьбу выполнят))
Хотелось бы в скрипте получения треков. что бы при нажатии кнопки все треки.
треки копировались в ряд а не в столбик.
в екселе когда вставляешь. напротив ака трек номер. один вставляется напротив этого ака. а второй трек на следующий ак залазит.
 

Andronio

Король флуда
Дней с нами
992
Репутация
46
Розыгрыши
0
Сообщения
473
Лайки
1.934
Скрипт смены страны и валюты при нажатии на флаг россии постоянно ставит страну казахстан, как то это можно изменить?)
Конечно, в скрипте есть настройка
let myCountry = "KZ";
ставь свою страну и будет тебе счастье! :)

А вдруг мою просьбу выполнят))
Хотелось бы в скрипте получения треков. что бы при нажатии кнопки все треки.
треки копировались в ряд а не в столбик.
в екселе когда вставляешь. напротив ака трек номер. один вставляется напротив этого ака. а второй трек на следующий ак залазит.
У меня прекрасно вставляются в столбик, каждый на свое место
1600093225009.png
---------Двойное сообщение соединено: ---------
треки копировались в ряд а не в столбик.
Вот эту строку удали
1600093563178.png
 
Последнее редактирование:
  • Like
Лайки: VovikBull

jam

Знающий
Дней с нами
488
Репутация
0
Розыгрыши
0
Сообщения
81
Лайки
36
А как-то сделать чтобы из комбинированных заказов он все собирал можно? Думаю что скриптерам-абузерам это тоже нужно))
---------Двойное сообщение соединено: ---------
и еще хотел уточнить, но скорее всего это нереально так как находится на страницах заказов, можно ли тащить уплаченную цену, без купонов и скидок.
 
Последнее редактирование:

Kkkramb

Король флуда
Дней с нами
549
Репутация
1
Розыгрыши
0
Сообщения
448
Лайки
563
Переписал скрипт выбора страны в профиле для игры. Теперь можно делать неограниченное количество стран.
Настройка скрипта так:
"US", "ES", "DE", "RU", "KZ", 500
где коды стран в кавычках перечислены через запятую. Последнее число без кавычек - это задержка после выбора страны перед выбором области. Это актуально для стран USA, UK и некоторых других. Если скрипт неправильно работает с выбором области, то можно увеличить эту задержку.

Ссылка на гитхаб
Перестало недавно менять страну в профиле. У всех так?

Аккаунт какой-то проблемный попался, вручную тоже не меняется.
 
  • Like
Лайки: AlS00 и Volk7

Топка

Знающий
Дней с нами
283
Репутация
0
Розыгрыши
0
Сообщения
141
Лайки
71
1600354788999.png

можно скрипт, чтобы менялась страна, язык и баксы на те которые мне нужны. мне надо чтобы профиль был англ и язык не выставляется автоматически.