kpmtmby
Флудер
- Дней с нами
- 2.384
- Розыгрыши
- 0
- Сообщения
- 334
- Репутация
- 2
- Реакции
- 396
Планируется ли обновить скрипт "Заполнение данных платежной карты" - все чаще лезет новая форма интерфейса и он не срабатывает
Планируется ли обновить скрипт "Заполнение данных платежной карты" - все чаще лезет новая форма интерфейса и он не срабатывает
Andronio
У тебя есть скрипт который @description Получает ID, название, цену и конфигурацию.
Очень мне нравится его функционал, но сдох уже некоторое время назад.
Кнопка иногда появляется но ничего не копирует.
Исправь пожалуйста.
Отличный по задумке скрипт. Но у меня так и не заработал. При нажатии на кнопку "Получить ID" на странице товара ничего не происходит (в буфере обмена пусто). FF52портабл, перепробовал все три ...monkey. Так и не разобрался. Может кто-то направит, куда копать?
Добрый день. Планируете ли обновить скрипт ? В данный момент он не работаетНу вот здесь же все расписано с картинками.
---------Двойное сообщение соединено: ---------Код:// ==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. Перестал работать.Есть возможность исправить?Скрипт переключения валюты в КОРЗИНЕ. Появляются две кнопки - USD и RUB - переключают на соответствующую валюту. Также в скрипте осталось изменение страны. Если указать стану пустую строку "", то страна меняться не будет. Если указать страну, например KZ, то страна будет меняться на указанную.
Код:// ==UserScript== // @name Aliexpress in Cart Currency Changer // @namespace http://tampermonkey.net/ // @version 0.1 // @description Изменяет валюту в корзине // @author Andronio // @match https://shoppingcart.aliexpress.ru/shopcart/shopcartDetail.htm* // @match https://shoppingcart.aliexpress.com/shopcart/shopcartDetail.htm* // @grant none // ==/UserScript== let myCountry = ""; (function repeat() { 'use strict'; let cart = document.querySelector(".captain h2"); if (!cart) return setTimeout(repeat, 200); let btnBox = document.createElement("div"); btnBox.id = "btn-box"; btnBox.style.display = "inline-block"; cart.style.display = "inline-block"; cart.after(btnBox); btnBox.innerHTML = `<div class="currency-button" data-curr="USD"><span class="css_flag css_us" style="display:inline"><span class="shipping-text" style="display:inline">USD</span></span></div> <div class="currency-button" data-curr="RUB"><span class="css_flag css_ru" style="display:inline"><span class="shipping-text" style="display:inline">RUB</span></span></div>`; let style = document.createElement("style"); style.innerHTML = `.currency-button { display: inline-block; padding: 5px 10px; margin-left: 20px; border: 2px solid black; border-radius: 0.5em; cursor:pointer; } .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("c_tp=")) { if (elem.slice(5) == currency) return elem; else { isNeedModif = true; return "c_tp=" + 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")) { let str2 = `aep_usuc_f=${str}; path=/; expires=Tue, 19 Jan 2088 03:14:07 GMT; domain=.aliexpress.ru`; document.cookie = str2; window.location.reload(); } else if (window.location.hostname.includes("aliexpress.com")) { let str2 = `aep_usuc_f=${str}; path=/; expires=Tue, 19 Jan 2088 03:14:07 GMT; domain=.aliexpress.com`; document.cookie = str2; window.location.reload(); } else {alert("Ошибка в скрипте")}; window.mybtn = btn; window.mybtn.classList.add("yes-modify-btn"); setTimeout(() => window.mybtn.classList.remove("yes-modify-btn"), 300); window.location.reload(); } else { window.mybtn = btn; window.mybtn.classList.add("no-modify-btn"); setTimeout(() => window.mybtn.classList.remove("no-modify-btn"), 300); } }
// ==UserScript==
// @name Show price combinations list (10.05.2022)
// @namespace http://tampermonkey.net/
// @version 0.7
// @author Dimokin - https://mipped.com/f/members/dimokin.65355/
// @match https://ru.aliexpress.com/item/*
// @match https://www.aliexpress.com/item/*
// @match https://aliexpress.ru/item/*
// @grant none
// @require http://code.jquery.com/jquery-3.3.1.min.js
// ==/UserScript==
(function() {
'use strict';
var $ = window.jQuery;
$(document).ready(function() {
let startHTML = document.querySelector("html").outerHTML.split('window.runParams =')[1];
let endHTML = startHTML.split('var GaData')[0];
function strToObj(str) {
var obj = {};
if (str && typeof str === 'string') {
var objStr = str.match(/\{(.)+\}/g);
eval("obj =" + objStr);
}
return obj
}
let mainObject = strToObj(endHTML);
mainObject.skuModule.skuPriceList.sort(function(a, b) {
let actPriceField = a.skuVal.skuActivityAmount ? 'skuActivityAmount' : 'skuAmount';
let defaultPriceField;
if (a.skuVal.skuActivityAmount || a.skuVal.skuAmount) {
defaultPriceField = a.skuVal.skuActivityAmount ? 'skuActivityAmount' : 'skuAmount';
} else {
defaultPriceField = a.skuVal.skuAmount ? 'skuAmount' : 'skuActivityAmount';
}
var keyA = parseFloat(a.skuVal[actPriceField].value),
keyB = parseFloat(b.skuVal[actPriceField].value),
keyC = parseFloat(a.skuVal[defaultPriceField].value),
keyD = parseFloat(b.skuVal[defaultPriceField].value);
if (keyA == keyB) {
return (keyC > keyD) ? -1 : (keyA < keyD) ? 1 : 0;
} else {
return (keyA < keyB) ? -1 : 1;
}
});
var div = document.createElement('div');
div.className = 'prices';
div.innerHTML += `
<button class="price-toggle">
Show/Hide
</button>
`;
$(div).append('<div class="price-list"></div>');
let pricesIndexes = [];
let newPriceList = [];
let hasCountries = false;
mainObject.skuModule.productSKUPropertyList.forEach(function(element) {
if (element.skuPropertyId === 200007763) {
hasCountries = true;
}
});
mainObject.skuModule.skuPriceList.forEach(function(element) {
if (hasCountries) {
if (element.skuPropIds.includes('201336100') || element.skuPropIds.includes('201336103') || element.skuPropIds.includes('203124901')) {
newPriceList.push(element);
}
} else {
newPriceList.push(element);
}
});
newPriceList.forEach(function(element) {
let propsId = element.skuPropIds.split(',');
let availableCount = element.skuVal.availQuantity;
let propString = '';
let propIndex = [];
if (propsId.length) {
propsId.forEach(function(prop, index) {
if (mainObject.skuModule.productSKUPropertyList && mainObject.skuModule.productSKUPropertyList.length) {
mainObject.skuModule.productSKUPropertyList.forEach(function(listItem) {
listItem.skuPropertyValues.forEach(function(skuProp, skuIndex) {
if (prop == skuProp.propertyValueId && availableCount > 0) {
propString += skuProp.propertyValueDisplayName;
propIndex.push(skuIndex);
}
});
});
if (index !== propsId.length - 1) {
propString += ' - '
}
}
});
}
if (propIndex.length) {
pricesIndexes.push(propIndex);
}
let priceField = element.skuVal.skuActivityAmount ? 'skuActivityAmount' : 'skuAmount';
let price = element.skuVal[priceField].value;
var oldHtml = $(div).find('.price-list').html();
if (element.skuVal.availQuantity > 0) {
$(div).find('.price-list').html(oldHtml + `
<div class="price-row">
<div class="price-row__left">${propString} </div>
<div class="price-row__right">${price} ${mainObject.commonModule.currencyCode}</div>
</div>
`);
}
});
var styles = `
.prices {
position: fixed;
top: 0;
right: 0;
background: white;
box-shadow: 1px -1px 4px 1px;
max-width: 40%;
max-height: 400px;
padding: 10px 20px;
overflow-y: auto;
overflow-x: hidden;
z-index:9999;
}
.price-list {
margin-top: 15px;
}
.price-row {
display:flex;
padding:3px;
margin-bottom:0;
justify-content: space-between;
cursor:pointer;
}
.price-row:hover,.price-row.active {
background: lightgrey;
}
.price-row__left {}
.price-row__right {
min-width: 90px;
text-align: right;
margin-left: 20px;
width: 10%;
flex-shrink: 0;
}
.price-toggle {
display: block;
margin-right: auto;
cursor:pointer;
}`
var styleSheet = document.createElement("style")
styleSheet.type = "text/css"
styleSheet.innerText = styles
document.head.appendChild(styleSheet)
document.body.appendChild(div);
$(document).on("click", ".price-toggle", function() {
$(div).find('.price-list').toggle();
setTimeout($(window).trigger('resize'), 300);
});
let propertyLists = $('.product-sku').find('.sku-property-list');
if (pricesIndexes.length) {
pricesIndexes[0].forEach(function(price, priceIndex) {
for (var i = 0; i < propertyLists.length; i++) {
if (i === priceIndex) {
let propIndex = pricesIndexes[0][priceIndex];
let prop = $('.sku-property-list').eq(i).find('.sku-property-item').eq(propIndex)
if (prop.hasClass("selected")) {} else {
prop.trigger('click');
}
}
}
});
}
$('.price-row').eq(0).addClass('active');
$('.price-row').click(function(event) {
let index = $(this).index();
$('.price-row').each(function() {
if ($(this).hasClass("active")) {
$(this).removeClass('active');
}
});
$(this).addClass('active');
let propertyLists = $('.product-sku').find('.sku-property-list');
pricesIndexes[index].forEach(function(price, priceIndex) {
for (var i = 0; i < propertyLists.length; i++) {
if (i === priceIndex) {
let propIndex = pricesIndexes[index][priceIndex];
let prop = $('.sku-property-list').eq(i).find('.sku-property-item').eq(propIndex)
if (prop.hasClass("selected")) {} else {
prop.trigger('click');
}
}
}
});
});
});
})();
было бы идеально) поддерживаю идею)Приветствую! Планируется актуализировать скрипты под новый дизайн?
Скрипт быстрого заполнения адресных данных
Скрипт быстрого заполнения данных платежной карты
// ==UserScript==
// @name AliExpress - Disable New Address Form
// @description Отключает появление новой формы адреса на странице оформления
// @author longnull
// @namespace longnull
// @version 1.1
// @match https://shoppingcart.aliexpress.com/orders.htm*
// @match https://shoppingcart.aliexpress.com/order/confirm_order.htm*
// @match https://www.aliexpress.com/p/trade/confirm.html*
// ==/UserScript==
(() => {
'use strict';
// https://gist.github.com/jasperck/130651ca255eec1772074e5d5428c363
const XHR = unsafeWindow.XMLHttpRequest;
function newXHR() {
const xhr = new XHR();
xhr.addEventListener('readystatechange', () => {
if (xhr.readyState === 4 && xhr.responseURL.includes('mtop.aliexpress.address.sdk.getsupportcountrynew')) {
const originalResponse = xhr.responseText;
Object.defineProperty(xhr, 'responseText', { writable: true });
xhr.responseText = originalResponse.replace(/"sdkCountryList":\[.*?\]/, '"sdkCountryList":[]');
}
});
return xhr;
}
newXHR.prototype = XHR.prototype;
unsafeWindow.XMLHttpRequest = newXHR;
const timer = setInterval(() => {
if (unsafeWindow.runParams && unsafeWindow.runParams._ajax_sdk_country_list_) {
unsafeWindow.runParams._ajax_sdk_country_list_ = [];
clearInterval(timer);
}
}, 500);
})();
А этот можно починить? Очень удобныйНу вот здесь же все расписано с картинками.
---------Двойное сообщение соединено: ---------Код:// ==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; }
по ходу с корзины отключили автозаплнениеОбновил скрипт для отключения новой формы адреса на странице оформления.
Версия 1.2 не работает?Доброго дня. Плз ткните носом если есть на работающий скрипт быстрого входа по
Login:пароль
Стоял
AliExpress User Paste
на новых версиях сайта не работает, найти рабочий не могу (
Али поломал ответ на CORS запрос, поэтому браузер блочит запрос сохраненияпо ходу с корзины отключили автозаплнение
if (oSession.HTTPMethodIs('OPTIONS')) {
oSession.oResponse['Access-Control-Allow-Methods'] = oSession.oRequest['Access-Control-Request-Method'];
oSession.oResponse['Access-Control-Allow-Headers'] = oSession.oRequest['Access-Control-Request-Headers'];
oSession.oResponse['Access-Control-Allow-Origin'] = oSession.oRequest['Origin'];
}
Пришлось поковырять и переписать под Украину отдельной версией с новым шаблоном, таким образом они работают паралельноАли поломал ответ на CORS запрос, поэтому браузер блочит запрос сохранения
Как временное решение можно использовать скрипт для фидлера (вставлять в OnBeforeResponse)
JavaScript:if (oSession.HTTPMethodIs('OPTIONS')) { oSession.oResponse['Access-Control-Allow-Methods'] = oSession.oRequest['Access-Control-Request-Method']; oSession.oResponse['Access-Control-Allow-Headers'] = oSession.oRequest['Access-Control-Request-Headers']; oSession.oResponse['Access-Control-Allow-Origin'] = oSession.oRequest['Origin']; }
Она и стоит - не работает.Версия 1.2 не работает?---------Двойное сообщение соединено: ---------
Странно, у меня как работал, так и работает, и тоже файрфоксОна и стоит - не работает.
При попытке вставить лог:пароль - тупо ничего не происходит - Мазила
я так понимаю, уже не работает скрипт, постоянно лезет новая форма адреса(Обновил скрипт для отключения новой формы адреса на странице оформления.
Со скриптом была замечена проблемка - бывает, что оформление не проходит, кружок крутится бесконечно. После обнаружения проблемы чуть-чуть поправил, возможно, теперь проблемы нет, после того не оформлял заказы на новой странице.
JavaScript:// ==UserScript== // @name AliExpress - Disable New Address Form // @description Отключает появление новой формы адреса на странице оформления // @author longnull // @namespace longnull // @version 1.1 // @match https://shoppingcart.aliexpress.com/orders.htm* // @match https://shoppingcart.aliexpress.com/order/confirm_order.htm* // @match https://www.aliexpress.com/p/trade/confirm.html* // ==/UserScript== (() => { 'use strict'; // https://gist.github.com/jasperck/130651ca255eec1772074e5d5428c363 const XHR = unsafeWindow.XMLHttpRequest; function newXHR() { const xhr = new XHR(); xhr.addEventListener('readystatechange', () => { if (xhr.readyState === 4 && xhr.responseURL.includes('mtop.aliexpress.address.sdk.getsupportcountrynew')) { const originalResponse = xhr.responseText; Object.defineProperty(xhr, 'responseText', { writable: true }); xhr.responseText = originalResponse.replace(/"sdkCountryList":\[.*?\]/, '"sdkCountryList":[]'); } }); return xhr; } newXHR.prototype = XHR.prototype; unsafeWindow.XMLHttpRequest = newXHR; const timer = setInterval(() => { if (unsafeWindow.runParams && unsafeWindow.runParams._ajax_sdk_country_list_) { unsafeWindow.runParams._ajax_sdk_country_list_ = []; clearInterval(timer); } }, 500); })();
Привет! Спасибо за скрипт смены страны и валюты. В целом скрипт хорош, но почему в нём нет смены языка? Ведь если не сменить язык с русского на английский, то и страна и валюта автоматом переключаются на Россию и рубли. И тогда смысла в этом скрипте нет. Сделай пожалуйста чтоб в нём ещё и смена языка была.Скрипт работает на всех страницах алиэкпресса, воткнуть кнопку на каждую страницу невозможно, а делать плавающую - не эргономично, и так уже всяких кнопок на каждой странице.
Это надо проводить исследования, на которые у меня нет времени.
Скрипт автоматически меняет страну доставки на выбранную и валюту. Исправленная версия, не должен конфликтовать со скриптом мипеда. Можно выбирать что менять, если параметр оставить пустым, то он меняться не будет, вот так:
Код:let myCurrency = ""; let myCountry = "";
Код:// ==UserScript== // @name Aliexpress Country Changer // @namespace http://tampermonkey.net/ // @version 0.2 // @description Изменяет страну и валюту // @author Andronio // @match https://*.aliexpress.ru/* // @match https://*.aliexpress.com/* // @grant none // @run-at document-start // ==/UserScript== let myCurrency = "USD"; let myCountry = "KZ"; (function () { 'use strict'; if (!location.href.includes("mydata=123")) { 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("c_tp=")) { if (myCurrency != "" && elem.slice(5) != myCurrency) { isNeedModif= true; return "c_tp=" + myCurrency; } else return elem; } if (elem.startsWith("region=")) { if (myCountry != "" && elem.slice(7) != myCountry) { isNeedModif= true; return "region=" + myCountry; } else return elem; } return elem; }); str = cookie.join("&"); } }; if (isNeedModif) { if (location.hostname.includes("aliexpress.ru")) { document.cookie = `aep_usuc_f=${str}; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT; domain=.aliexpress.ru`; } else if (location.hostname.includes("aliexpress.com")) { document.cookie = `aep_usuc_f=${str}; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT; domain=.aliexpress.com`; } else {alert("Ошибка в скрипте")}; location.reload(); } } })();