// ==UserScript== // @name AliExpress Total Price // @namespace forked_bytes // @match https://*.aliexpress.com/item/* // @match https://*.aliexpress.us/item/* // @grant none // @version 1.3.1 // @author forked_bytes // @license 0BSD // @description Display total price (including shipping) on AliExpress item pages // @downloadURL none // ==/UserScript== const total = document.createElement('h2'); setInterval(function() { const priceElement = document.querySelector('.product-price-current'); const shippingElement = document.querySelector('.dynamic-shipping-line'); const quantityElement = document.querySelector('div[class*="quantity--picker"] input'); const [price, prefix, suffix] = parse(priceElement?.textContent); const [shipping] = parse(shippingElement?.textContent); const quantity = parseInt(quantityElement?.value) || 1; if (price) total.textContent = `Σ ${prefix}${(price * quantity + shipping).toFixed(2)}${suffix}`; if ((shipping || quantity > 1) && !total.isConnected) priceElement.parentElement.appendChild(total); }, 500); function parse(text) { const match = text?.match(/([^\d\s]*)(\d[\d\s.,]*\d|\d)([^\d\s]*)/); if (!match) return [0, '', '']; let [, prefix, price, suffix] = match; price = price.replace(/\s/g, '').split(/\D+/); if (!prefix && !suffix && price.length <= 1) return [0, '', '']; price = price.length > 1 ? price.slice(0, -1).join('') + '.' + price[price.length - 1] : price[0]; return [parseFloat(price), prefix, suffix]; }