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

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

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

  • Да

    Голосов: 294 63,9%
  • Нет

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

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


Приветствую. Видел здесь скрипт по автоматической смене страны на Aliexpress на указанную в скрипте. А можно ли сделать для Али кнопку, которая будет менять страну доставки, оставляя тот же язык и валюту. Допустим RU на US, а при повторном нажатии опять на RU. Надеюсь логику объяснил понятно.
 
Добрый день. У меня сломался этот скрипт на быстрое заполнение адреса, не появляется справа в верху окошко для ввода данных, переустановил браузер, добавил скрипт и не работает( Что посмотреть нужно? Спасибо
 
Последнее редактирование:
Приветствую. Видел здесь скрипт по автоматической смене страны на Aliexpress на указанную в скрипте. А можно ли сделать для Али кнопку, которая будет менять страну доставки, оставляя тот же язык и валюту. Допустим RU на US, а при повторном нажатии опять на RU. Надеюсь логику объяснил понятно.
Итак, вопрос частично закрыт. Хоть и не совсем смыслю в программировании, но, взяв за основу скрипт от Andronio "Смена валюты и страны", перепилил под свои нужды.
Теперь имеем две плавающие кнопки, переключающие страну доставки(валюта и язык остаются прежними). В коде 100% много ненужного осталось, так что кто в теме, может подправить.

Код:
// ==UserScript==
// @name         Aliexpress Country Changer
// @namespace    Violent
// @version      0.1
// @description  Изменяет страну доставки
// @author       Nigativ
// @match        https://*.aliexpress.ru/*
// @match        https://*.aliexpress.com/*
// @grant        none
// ==/UserScript==

let myCountry = "";

(function repeat() {
    'use strict';
let logoPic = document.querySelector(".hm-left");
    if (!logoPic) return setTimeout(repeat, 200);
    let btnBox = document.createElement("div");
    btnBox.id = "btn-box";
    logoPic.after(btnBox);
    btnBox.innerHTML = `<div class="currency-button" data-curr="US"><span class="css_flag css_us" ><span class="shipping-text" >US</span></span></div>
                        <div class="currency-button" data-curr="RU"><span class="css_flag css_ru" ><span class="shipping-text" >RU</span></span></div>`;
    let style = document.createElement("style");
    style.innerHTML = `.currency-button {
    margin: 5px;
    display: -webkit-box;
    width: 60px;
    padding: 5px 5px;
    border: 1px solid #cbcbcb;
    border-radius: 0.3em;
    cursor: pointer;
                      }
    #btn-box{
    display: -webkit-box;
    background: white;
    border: 1px solid #cbcbcb;
    border-radius: 0.3em;
    position: fixed;
    right: 0;
    top: 40px;
    z-index: 1000;
                      }
    .no-modify-btn {background-color: OrangeRed;}
    .yes-modify-btn {background-color: Lime;}
                            `;
    document.head.append(style);
    btnBox.addEventListener("click", btnClickHandler);
})();


function btnClickHandler(event) {
    'use strict';

    let btn = event.target.closest(".currency-button");
    if (!btn) return;
    let currency = btn.dataset.curr;
    let cookies = document.cookie.split('; ');
    let isNeedModif = false;
    let str;
    for (let i = 0; i < cookies.length; i++) {
        if (cookies[i].startsWith("aep_usuc_f=")) { // Если нашел нужную куку
            let cookie = cookies[i].slice(11).split('&'); // Убираем aep_usuc_f= и разделяем
            cookie = cookie.map(elem => { // Смотрим, что в куке
                if (elem.startsWith("region=")) {
                    if (elem.slice(5) == currency)
                        return elem;
                    else {
                    isNeedModif = true;
                    return "region=" + currency;
                    }
                } else if (elem.startsWith("region=")) {
                    let currCountry = elem.slice(7);
                    if (myCountry == "")
                        return elem;
                    else if (currCountry == myCountry)
                        return elem
                    else {
                        isNeedModif = true;
                        return "region=" + myCountry;
                    }

                } else return elem;
            });
            str = cookie.join("&");
            break;
        }
    }
    if (isNeedModif) {
        if (window.location.hostname.includes("aliexpress.ru")) {
            document.cookie = `aep_usuc_f=${str}; path=/; expires=Tue, 19 Jan 2088 03:14:07 GMT; domain=.aliexpress.ru`;
            window.location.reload();
        } else if (window.location.hostname.includes("aliexpress.com")) {
            document.cookie = `aep_usuc_f=${str}; path=/; expires=Tue, 19 Jan 2088 03:14:07 GMT; domain=.aliexpress.com`;
            window.location.reload();
        } else {alert("Ошибка в скрипте")};
        btn.classList.add("yes-modify-btn");
        setTimeout(() => {btn.classList.remove("yes-modify-btn");}, 300);
        window.location.reload();
    } else {
        btn.classList.add("no-modify-btn");
        setTimeout(() => {btn.classList.remove("no-modify-btn");}, 300);
    }
}
 
  • Like
Реакции: SnegovikRZN
Код:
// ==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;
}
Уважаемый, скрипт мало того ,что давно перестал работать на ру версии, так еще и на глобальной тоже! Злоебучий редизайн снова. Вы не могли бы поправить скрипт?:no: Справился бы и сам, да вот в жс не шарю совсем. Кстати, я, разве что, сделал поправку в текущей версии скрипта ,чтобы он вставлял цену без букв, только числом и без пробелов, чтобы можно было финансовый формат в экселе у столбца сделать.
реплейс сюда добавил
JavaScript:
prodPrice = productPrice[num].innerText.trim().replace("руб.", "").replace(/\s/g, '');
 
Последнее редактирование:
  • Like
Реакции: VovikBull
Можно скрипт на Бадис пожалуйста , нажатия спинов ,получения купона, запуск моб версии бадиса( что бы ненажимать контрл шифт М
 
Последнее редактирование:
Можно скрипт на Бадис пожалуйста , нажатия спинов ,получения купона, запуск моб версии бадиса( что бы ненажимать контрл шифт М
Ребят сделайте пожалуйста
 
Уважаемый, скрипт мало того ,что давно перестал работать на ру версии, так еще и на глобальной тоже! Злоебучий редизайн снова. Вы не могли бы поправить скрипт?:no: Справился бы и сам, да вот в жс не шарю совсем. Кстати, я, разве что, сделал поправку в текущей версии скрипта ,чтобы он вставлял цену без букв, только числом и без пробелов, чтобы можно было финансовый формат в экселе у столбца сделать.
реплейс сюда добавил
JavaScript:
prodPrice = productPrice[num].innerText.trim().replace("руб.", "").replace(/\s/g, '');
по этой ссылке все нормально работает
Правда на некоторых акках с нее редиректитит на новую, я еще не понял закономерности почему.
 
по этой ссылке все нормально работает
Правда на некоторых акках с нее редиректитит на новую, я еще не понял закономерности почему.
Так я на нее всегда и перехожу, на на некоторых акках че ни делай, все равно перебрасывает на новую версию(
 
Воспользовался отличными идеями @future_ и @Evgeniy123 по поводу решения капчи при входе, плюс суперская идея @0xFF по логину и его куски кода собрал в кучу и забацал скрипт входа на алиэкпресс с решением слайдера и капчи.

Для тех, у кого пароль постоянный прописывайте в let alwaysPass = "";
Логин в формате логин:пароль или логин<TAB>пароль вставлять в поле логина или пароля на алиэкпресс.
*** Скрытый текст не может быть процитирован. ***


ps: Оттестировать толком не успел, уже 2 часа ночи.
Можете скинуть в личку?
 
проблема с слайдером может скрипт можно?
 

Вложения

  • 1.1.PNG
    1.1.PNG
    40,9 KB · Просмотры: 146
  • 1.2.PNG
    1.2.PNG
    18,2 KB · Просмотры: 155
Накидал по быстрому такой скрипт, товары только не прячет, вроде работает:

JavaScript:
// ==UserScript==
// @name         SS
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        *://*.aliexpress.com/wholesale*
// @match        *://*.aliexpress.ru/wholesale*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var first_trigger=true;

   // console.log('START');

    window.onload = function(){

        if(first_trigger){

/*
       localStorage.setItem("second", "true");
       var setting = localStorage.getItem("second");
       console.log(setting);
*/


  document.getElementsByClassName('nav-breadcrumb')[0].insertAdjacentHTML('afterend',`<div style="position:relative;border-radius:3px;text-align:center; top:5px;padding-top:5px;padding-bottom:5px;width:112px;background:#ef0000;color:white">Дополнить

<div id="s_inp_cost" style="position:absolute;border-radius:3px;display: inline-block;border:none;background:blue;top:0px;height:100%; left:117px;">
<input id="avg_id" value="" style="line-height:1.51em;width:4.5em;" placeholder="avg" autocomplete="off" value="" >

</div>
<div id="vai" style="position:absolute;background:orange;user-select:none;cursor:pointer;left:14em;width:60px;text-align:center; top:0px;border-radius:3px;padding-top:5px;padding-bottom:5px;">OK</div>
</div>

                                      `);

document.getElementById('vai').addEventListener('click',comecar);


        function comecar(event){

        var preco = document.getElementById('avg_id').value.toString();

            var tipo = -1;



            var tem_un_ponto = preco.indexOf('.');
            if(tem_un_ponto>-1){ tipo = 1; }
            else{
             var o_primeiro = preco.substring(0,1);
                 if(o_primeiro === '0'){ tipo = 2; }else{

                     tipo = 3;

            }

            }//else nao ponto


        //    console.log(tipo);

            var min_set = document.querySelector("input[placeholder='min']");
            var max_set = document.querySelector("input[placeholder='max']");
 
if(!min_set){

           min_set = document.querySelector("input[placeholder='мин']");
           max_set = document.querySelector("input[placeholder='макс']");
}


          var nivs = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set;

            min_set.focus();


            switch(tipo){

                case 1:
                   // min_set.value = preco;
                   // max_set.value = preco;


                    nivs.call(min_set, preco);
                      min_set.dispatchEvent(new Event('change', {bubbles: true}));
                      nivs.call(max_set, preco);
                      max_set.dispatchEvent(new Event('change', {bubbles: true}));


                    ;break;

                case 2:
                  //  min_set.value = o_primeiro +'.'+preco.substring(1);
                  //  max_set.value = o_primeiro +'.'+preco.substring(1);

                      nivs.call(min_set, o_primeiro +'.'+preco.substring(1));
                      min_set.dispatchEvent(new Event('change', {bubbles: true}));
                      nivs.call(max_set, o_primeiro +'.'+preco.substring(1));
                      max_set.dispatchEvent(new Event('change', {bubbles: true}));

                    break;

                case 3:
                   // min_set.value = o_primeiro +'.'+preco.substring(1);
                   // max_set.value = o_primeiro +'.'+preco.substring(1);
                      nivs.call(min_set, o_primeiro +'.'+preco.substring(1));
                      min_set.dispatchEvent(new Event('change', {bubbles: true}));
                      nivs.call(max_set, o_primeiro +'.'+preco.substring(1));
                      max_set.dispatchEvent(new Event('change', {bubbles: true}));



                    ;break;


                   }

  //click price
       var gogo = document.querySelector('a.ui-button.narrow-go');

       if(gogo){gogo.click();



               }





        




            var target = document.getElementsByClassName('list-items')[0];

const config = {
    attributes: true,
    childList: true,
    subtree: true
};





            // Функция обратного вызова при срабатывании мутации
const callback = function(mutationsList, observer) {



    for (let mutation of mutationsList) {

        if (mutation.type === 'childList') {


 //free ship click
            var envio_gratis = document.querySelectorAll("span span.next-checkbox-label span");

            for (var ips = 0; ips < envio_gratis.length; ips++) {
                if (envio_gratis[ips].textContent == "Free Shipping" || envio_gratis[ips].textContent == "Бесплатная Доставка") {
                envio_gratis = envio_gratis[ips];
                break;
                }
           }



                if(envio_gratis.parentElement.parentElement.getElementsByClassName('next-checkbox')[0].getElementsByTagName('input')[0]){
            if(!envio_gratis.parentElement.parentElement.getElementsByClassName('next-checkbox')[0].getElementsByTagName('input')[0].checked){
            envio_gratis.click();
              //  envio_gratis.parentElement.parentElement.getElementsByClassName('next-checkbox')[0].getElementsByTagName('input')[0].checked==='true';
            } }


             observer.disconnect();




        }

    }


};//callback



const observer = new MutationObserver(callback);
observer.observe(target, config);





        }//comecar


            first_trigger=false;



        }//!first_trigger


    }



})();
---------Двойное сообщение соединено: ---------
Теперь скрывает товары, скрипт не влазит в сообщение, поэтому в файле
Этот скрипт поиска добивки для купонов точно работает? Проверяю в фаерфоксе и не работает почему-то. Другие скрипты работают, a этот уже нет. Проверьте кто-то. В чём причина?
 
Последнее редактирование:
Кто знает, есть ли какой-нибудь скрипт для отслеживания цены на одном или нескольких лотах? Чтобы этот скрипт регулярно, скажем, каждые 5 сек, проверял цену на определенный товар, и если она ниже заданной мною - давал мне оповещение
 
Кто знает, есть ли какой-нибудь скрипт для отслеживания цены на одном или нескольких лотах? Чтобы этот скрипт регулярно, скажем, каждые 5 сек, проверял цену на определенный товар, и если она ниже заданной мною - давал мне оповещение

как вариант
Скрытое содержимое доступно для зарегистрированных пользователей!

 
  • Like
Реакции: xavikz

как вариант

*** Скрытый текст не может быть процитирован. ***​

Спасибо. Только пока не разобрался как сделать так чтоб оно в фоне нормально работало (я так понимал только платно, через клауд?), но в целом функционал тот который нужен.
 
Последнее редактирование:
Киты заполнение карты поменяли на ком домене.
Скрипты соответственно не воркают (
 

Вложения

  • корзина.JPG
    корзина.JPG
    57,8 KB · Просмотры: 136
Последнее редактирование:
Этот скрипт поиска добивки для купонов точно работает? Проверяю в фаерфоксе и не работает почему-то. Другие скрипты работают, a этот уже нет. Проверьте кто-то. В чём причина?
На ру версии поменялся селектор вверху страницы, версия с другим селектором(на гло не работает):
 

Вложения

  • SS_11_02_2022.user.js.txt
    9,8 KB · Просмотры: 83
На ру версии поменялся селектор вверху страницы, версия с другим селектором(на гло не работает):
верно! на гло не работает. И что делать нам? Надо писаль личное сообщение тому форумчанину который этот скрипт делал, чтоб его переделал под версию гло? Или может нам самим как-то собственными силами попробовать покапаться в коде и поправить? :6:
 
Нужно заменять ссылку с русского алика на глобальный, при переходе например с телеги.
Бегло поискал юзерскрипты под tampermonkey -ни один не работает, а с украинского ip не открывается aliexpress.ru.