144 lines
6.4 KiB
JavaScript
144 lines
6.4 KiB
JavaScript
// ==UserScript==
|
||
// @name Ali Get Track Number
|
||
// @version 0.3
|
||
// @description Extracts order IDs and adds corresponding spans to divs on AliExpress order list page
|
||
// @match https://aliexpress.ru/order-list?*ilterName=active
|
||
// @icon https://www.google.com/s2/favicons?sz=64&domain=aliexpress.ru
|
||
// @grant none
|
||
// ==/UserScript==
|
||
|
||
(function() {
|
||
'use strict';
|
||
|
||
function addOrderIdSpansToDivs(targetElement) {
|
||
let orderItemDivs = targetElement.querySelectorAll('div[class^="SnowOrderList_OrderItem__wrappe"]');
|
||
|
||
orderItemDivs.forEach((orderItemDiv) => {
|
||
let linkElement = orderItemDiv.querySelector('a');
|
||
if (linkElement) {
|
||
let linkHref = linkElement.getAttribute('href');
|
||
let orderId = linkHref.match(/(\d+)/);
|
||
if (orderId) {
|
||
orderId = orderId[0];
|
||
|
||
// Создаем новый span-элемент
|
||
let spanElement = document.createElement('span');
|
||
spanElement.className = `item${orderId}`;
|
||
|
||
// Создаем ссылку на страницу заказа AliExpress
|
||
let aliExpressLink = document.createElement('a');
|
||
aliExpressLink.href = linkHref;
|
||
aliExpressLink.innerHTML = ` ${orderId}`;
|
||
spanElement.appendChild(aliExpressLink);
|
||
|
||
// Создаем ссылку на страницу отслеживания на GdePos
|
||
// let gdePosLink = document.createElement('a');
|
||
// gdePosLink.href = `https://gdeposylka.ru/courier/omniva/tracking/${orderId}`;
|
||
// gdePosLink.innerHTML = ` GdePos`;
|
||
// spanElement.appendChild(gdePosLink);
|
||
|
||
// Добавляем созданный span-элемент в конец div-элемента
|
||
orderItemDiv.appendChild(spanElement);
|
||
|
||
// Выполняем дополнительные действия с каждым orderItemDiv
|
||
processOrderItemDiv(orderId, orderItemDiv);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
function processOrderItemDiv(orderId, orderItemDiv) {
|
||
let aliExpressLink = `https://aliexpress.ru/order-list/${orderId}?filterName=active`;
|
||
|
||
makeAsyncGetRequest(aliExpressLink)
|
||
.then(response => {
|
||
let dataMatch = /<script id="__AER_DATA__" type="application\/json">(.*?)<\/script>/s;
|
||
let dataMatchResult = response.match(dataMatch);
|
||
|
||
if (dataMatchResult && dataMatchResult[1]) {
|
||
let dataBlockJson = dataMatchResult[1];
|
||
let dataObject;
|
||
|
||
try {
|
||
dataObject = JSON.parse(dataBlockJson);
|
||
// console.log(dataBlockJson);
|
||
// Находим "packages" в объекте и выводим его
|
||
findAndPrintPackages(dataObject, orderId, orderItemDiv);
|
||
|
||
} catch (error) {
|
||
console.error('Error parsing JSON:', error);
|
||
}
|
||
} else {
|
||
console.error('Could not find JSON data in the response.');
|
||
}
|
||
})
|
||
.catch(error => console.error(error));
|
||
}
|
||
|
||
function findAndPrintPackages(obj, orderId, orderItemDiv) {
|
||
// Рекурсивно ищем блок "packages" и обновляем текст элемента
|
||
if (typeof obj === 'object') {
|
||
for (let key in obj) {
|
||
if (key === 'packages') {
|
||
let packages = obj[key];
|
||
for (let packageInfo of packages) {
|
||
updateTextForOrderItem(packageInfo, orderId, orderItemDiv);
|
||
}
|
||
} else {
|
||
findAndPrintPackages(obj[key], orderId, orderItemDiv);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function updateTextForOrderItem(packageInfo, orderId, orderItemDiv) {
|
||
if (packageInfo.trackNumber && packageInfo.originalTrackNumber) {
|
||
let itemSelector = `.item${orderId}`;
|
||
let itemElement = orderItemDiv.querySelector(itemSelector);
|
||
|
||
if (itemElement) {
|
||
let isOrderIdPresent = itemElement.querySelector(`a[href*="${orderId}"]`);
|
||
// let textDecoration = isOrderIdPresent ? 'background-color: lightpink;' : '';
|
||
|
||
let newContent = `<span class="${itemSelector}"><a href="https://aliexpress.ru/order-list/${orderId}?filterName=active" target="_blank" style="background-color:#b6f2ff"> ${packageInfo.originalTrackNumber}</a>`;
|
||
newContent += `<a href="https://gdeposylka.ru/detect/${packageInfo.originalTrackNumber}" target="_blank" style="background-color:#b6ffbb"> GdePos</a></br>`;
|
||
if (packageInfo.trackNumber != packageInfo.originalTrackNumber) {
|
||
newContent += `<a href="https://aliexpress.ru/order-list/${orderId}?filterName=active" target="_blank" style="background-color:#ffb6c1;"> ${packageInfo.trackNumber}</a>`;
|
||
newContent += `<a href="https://gdeposylka.ru/detect/${packageInfo.trackNumber}" target="_blank" style="background-color:#c7b6ff"> GdePosNEW</a></span></br>`;
|
||
};
|
||
itemElement.innerHTML = newContent;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
function makeAsyncGetRequest(aliExpressLink) {
|
||
return new Promise((resolve, reject) => {
|
||
let xhr = new XMLHttpRequest();
|
||
xhr.open('GET', aliExpressLink, true);
|
||
|
||
xhr.onload = function () {
|
||
if (xhr.status >= 200 && xhr.status < 300) {
|
||
resolve(xhr.responseText);
|
||
} else {
|
||
reject(`Error: ${xhr.status}`);
|
||
}
|
||
};
|
||
|
||
xhr.onerror = function () {
|
||
reject('Network error');
|
||
};
|
||
|
||
xhr.send();
|
||
});
|
||
}
|
||
|
||
// Слушаем событие завершения загрузки страницы
|
||
window.addEventListener('load', () => {
|
||
let targetElement = document.querySelector('.SnowOrderList_Wrapper__wrapper__12ov3'); // Замените на ваш реальный селектор
|
||
if (targetElement) {
|
||
addOrderIdSpansToDivs(targetElement);
|
||
}
|
||
});
|
||
})();
|