hack-master
Новый пользователь
Выложите пожалуйста код скрипта "Скрипт быстрого входа с решением слайдера и капчи"
просмотр закрыт
просмотр закрыт
Последнее редактирование:
Итак, вопрос частично закрыт. Хоть и не совсем смыслю в программировании, но, взяв за основу скрипт от Andronio "Смена валюты и страны", перепилил под свои нужды.Приветствую. Видел здесь скрипт по автоматической смене страны на Aliexpress на указанную в скрипте. А можно ли сделать для Али кнопку, которая будет менять страну доставки, оставляя тот же язык и валюту. Допустим RU на US, а при повторном нажатии опять на RU. Надеюсь логику объяснил понятно.
// ==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);
}
}
Уважаемый, скрипт мало того ,что давно перестал работать на ру версии, так еще и на глобальной тоже! Злоебучий редизайн снова. Вы не могли бы поправить скрипт? Справился бы и сам, да вот в жс не шарю совсем. Кстати, я, разве что, сделал поправку в текущей версии скрипта ,чтобы он вставлял цену без букв, только числом и без пробелов, чтобы можно было финансовый формат в экселе у столбца сделать.Код:// ==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; }
prodPrice = productPrice[num].innerText.trim().replace("руб.", "").replace(/\s/g, '');
Ребят сделайте пожалуйстаМожно скрипт на Бадис пожалуйста , нажатия спинов ,получения купона, запуск моб версии бадиса( что бы ненажимать контрл шифт М
по этой ссылке все нормально работаетУважаемый, скрипт мало того ,что давно перестал работать на ру версии, так еще и на глобальной тоже! Злоебучий редизайн снова. Вы не могли бы поправить скрипт? Справился бы и сам, да вот в жс не шарю совсем. Кстати, я, разве что, сделал поправку в текущей версии скрипта ,чтобы он вставлял цену без букв, только числом и без пробелов, чтобы можно было финансовый формат в экселе у столбца сделать.
реплейс сюда добавилJavaScript:prodPrice = productPrice[num].innerText.trim().replace("руб.", "").replace(/\s/g, '');
Так я на нее всегда и перехожу, на на некоторых акках че ни делай, все равно перебрасывает на новую версию(по этой ссылке все нормально работает
Правда на некоторых акках с нее редиректитит на новую, я еще не понял закономерности почему.
Можете скинуть в личку?Воспользовался отличными идеями @future_ и @Evgeniy123 по поводу решения капчи при входе, плюс суперская идея @0xFF по логину и его куски кода собрал в кучу и забацал скрипт входа на алиэкпресс с решением слайдера и капчи.
Для тех, у кого пароль постоянный прописывайте вlet alwaysPass = "";
Логин в формателогин:пароль
илилогин<TAB>пароль
вставлять в поле логина или пароля на алиэкпресс.
*** Скрытый текст не может быть процитирован. ***
ps: Оттестировать толком не успел, уже 2 часа ночи.
Этот скрипт поиска добивки для купонов точно работает? Проверяю в фаерфоксе и не работает почему-то. Другие скрипты работают, a этот уже нет. Проверьте кто-то. В чём причина?Накидал по быстрому такой скрипт, товары только не прячет, вроде работает:
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 } })();
---------Двойное сообщение соединено: ---------Теперь скрывает товары, скрипт не влазит в сообщение, поэтому в файле
Кто знает, есть ли какой-нибудь скрипт для отслеживания цены на одном или нескольких лотах? Чтобы этот скрипт регулярно, скажем, каждые 5 сек, проверял цену на определенный товар, и если она ниже заданной мною - давал мне оповещение
Спасибо. Только пока не разобрался как сделать так чтоб оно в фоне нормально работало (я так понимал только платно, через клауд?), но в целом функционал тот который нужен.как вариант
*** Скрытый текст не может быть процитирован. ***
На ру версии поменялся селектор вверху страницы, версия с другим селектором(на гло не работает):Этот скрипт поиска добивки для купонов точно работает? Проверяю в фаерфоксе и не работает почему-то. Другие скрипты работают, a этот уже нет. Проверьте кто-то. В чём причина?
верно! на гло не работает. И что делать нам? Надо писаль личное сообщение тому форумчанину который этот скрипт делал, чтоб его переделал под версию гло? Или может нам самим как-то собственными силами попробовать покапаться в коде и поправить?На ру версии поменялся селектор вверху страницы, версия с другим селектором(на гло не работает):