js-tampermonkey-public-scripts/Ali Get Track Number.user.js
Unkas Amanjolov 42b29defae first commit
2024-10-07 10:25:50 +05:00

144 lines
6.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ==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">&nbsp;${packageInfo.originalTrackNumber}</a>`;
newContent += `<a href="https://gdeposylka.ru/detect/${packageInfo.originalTrackNumber}" target="_blank" style="background-color:#b6ffbb">&nbsp;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;">&nbsp;${packageInfo.trackNumber}</a>`;
newContent += `<a href="https://gdeposylka.ru/detect/${packageInfo.trackNumber}" target="_blank" style="background-color:#c7b6ff">&nbsp;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);
}
});
})();