Greasy Fork is available in English.
It shows prices across amazon portals (IT,DE,FR,ES,UK,US,CA,AU)
// ==UserScript== // @name Amazon Global Price Comparator // @description It shows prices across amazon portals (IT,DE,FR,ES,UK,US,CA,AU) // @match https://www.amazon.it/* // @match https://www.amazon.de/* // @match https://www.amazon.co.uk/* // @match https://www.amazon.fr/* // @match https://www.amazon.es/* // @match https://www.amazon.com/* // @match https://www.amazon.com.au/* // @match https://www.amazon.ca/* // @version 2.2 // @author SH3LL // @grant GM_xmlhttpRequest // @namespace https://greasyfork.org/users/762057 // ==/UserScript== function get_price(url,location) { return new Promise(function (resolve, reject) { GM_xmlhttpRequest({ method: 'GET', responseType: 'document', synchronous: false, url: url, onload: (resp) => { const doc = document.implementation.createHTMLDocument().documentElement; doc.innerHTML = resp.responseText; let grabbed_price=null; // ----------------------------- REGULAR ITEMS ALGORITHM ----------------------------- // --- Latest amazon grabber --- if(grabbed_price === null) { grabbed_price = doc.querySelector('span.a-price.aok-align-center.reinventPricePriceToPayMargin.priceToPay'); // id prezzo if(grabbed_price!==null) grabbed_price=grabbed_price.children[1]; } // --- PriceBlock of type: OURPRICE --- if(grabbed_price === null) grabbed_price = doc.querySelector('#priceblock_ourprice'); // id prezzo if(grabbed_price === null) { grabbed_price = doc.querySelector('#apexPriceToPay'); if(grabbed_price!== null && grabbed_price.children[1]!==null) grabbed_price=grabbed_price.children[1]; }// nuova classe id del prezzo if(grabbed_price === null) grabbed_price = doc.querySelector('#priceblock_saleprice') // id prezzo scontato if(grabbed_price === null) grabbed_price = doc.querySelector('#priceblock_dealprice') // id prezzo offerta flash if(grabbed_price === null) grabbed_price = doc.querySelector('#priceblock_pospromoprice') // id prezzo offerta flash // --- PriceBlock of type: "New and Used From.." --- if(grabbed_price === null){ let etichette = doc.getElementsByTagName("span"); //ottiene tutti i tag "span" della pagina for(let el of etichette){ if( ( el.innerText.includes("Nuevos") && el.innerText.includes("desde") ) || ( el.innerText.includes("Nuovo") && el.innerText.includes("da") ) || ( el.innerText.includes("Neufs") && el.innerText.includes("occasions") ) || ( el.innerText.includes("Neu") && el.innerText.includes("ab") ) || ( el.innerText.includes("New") && el.innerText.includes("from") ) ) { if(el.children[0]!==undefined && el.children[0].children[1]!==undefined){ grabbed_price = el.children[0].children[1]; } break; } } } // ----------------------------- BOOK ITEMS ALGORITHM ----------------------------- // --- PriceBlock of type: APEX --- let price_block=doc.querySelector("#apex_desktop"); //id blocco del prezzo // --- PriceBlock of type: swatchElement (for Books) if(price_block===null && grabbed_price===null) price_block=doc.querySelector("#tmmSwatches"); if(price_block!==null && grabbed_price===null){ if(price_block.innerText.includes("€") || price_block.innerText.includes("£") || price_block.innerText.includes("$")){ // se il blocco c'è let etichette = price_block.getElementsByTagName("span"); for(let el of etichette){ if(el.className.includes("a-text-price") && el.getAttribute("data-a-color")==="price"){ grabbed_price = el.firstChild; break; } if(el.className.includes("a-price") && el.className.includes("priceToPay")){ grabbed_price = el.firstChild; break; } if(el.className.includes("a-size-base") && el.className.includes("a-color-price")){// for books grabbed_price = el; break; } if(el.id==="priceblock_ourprice"){ grabbed_price = el; break; } } } } // PASS THE OUTPUT if(grabbed_price !== null && grabbed_price !== undefined && grabbed_price.innerText !== null && grabbed_price.innerText !== undefined && grabbed_price.innerText.trim()!== "" && grabbed_price.innerText.length < 10) { resolve(grabbed_price.innerText); return; } resolve("error"); return; } }); }); } async function main(){ if(window.location.href.includes("/dp/") || window.location.href.includes("/gp/product/") ){ //get amazon country let my_location = (window.location.href).split("www.amazon.")[1].split("/")[0].trim(); let amz_code; //get amazon product code if(window.location.href.includes("/gp/product/") && window.location.href.includes("?") ){ amz_code=(window.location.href).split("?")[0].split('/gp/product/')[1]; }else if(window.location.href.includes("/gp/product/") && !window.location.href.includes("?")){ amz_code=(window.location.href).split('/gp/product/')[1]; }else if(window.location.href.includes("/dp/") && window.location.href.includes("?")){ amz_code=(window.location.href).split("?")[0].split('/dp/')[1].split('/')[0]; }else if(window.location.href.includes("/dp/") && !window.location.href.includes("?")){ amz_code=(window.location.href).split('/dp/')[1].split('/')[0]; } //let price_block = document.querySelector('#price'); //VECCHIO HOOK (che non esiste quando il prezzo è fuori stock) let price_block = document.querySelector('#desktop_unifiedPrice'); //HOOK if(price_block===null || price_block===undefined ) {price_block = document.querySelector('#productOverview_feature_div'); if(price_block!==null && price_block!==undefined) price_block=price_block.children[0];} if(price_block===null || price_block===undefined ) {price_block = document.querySelector('#adoptedData');} console.log(price_block); let tr1 = document.createElement("tr"); let div1 = document.createElement("div"); div1.style.position = "relative"; div1.style.left="100%"; let message1= document.createElement("label"); message1.innerText="⏳ Loading Prices.."; message1.style.color="firebrick"; tr1.append(div1); div1.append(message1); //price_block.children[0].children[0].append(tr1); //VECCHIO HOOK (che non esiste quando il prezzo è fuori stock) price_block.append(tr1); let locations = ["it","de","fr","es","co.uk","com","com.au","ca"]; let flags = { "it":"🇮🇹", "de":"🇩🇪", "fr":"🇫🇷", "es":"🇪🇸", "co.uk":"🇬🇧", "com":"🇺🇸","ca": "🇨🇦", "com.au": "🇦🇺" }; let prices=[],link,min_price=999999999999999999999999999; console.log("My Location:"+my_location); for(let curr_location of locations){ let curr_price = await get_price("https://www.amazon."+curr_location+"/dp/"+amz_code , curr_location); console.log(curr_location+": price-> " + curr_price) if(curr_price!=="error"){ //clean currency font in the right location if(curr_location=="it" || curr_location=="de" ||curr_location=="fr" ||curr_location=="es") {curr_price=curr_price.replace("€","").trim()+"€"} if(curr_location=="co.uk") {curr_price=curr_price.replace("£","").trim()+"£"} if(curr_location=="com" || curr_location=="com.au" || curr_location=="ca") {curr_price=curr_price.replace("$","").trim()+"$"} //get min price let cleaned_price=""; cleaned_price=curr_price.replace(",","."); cleaned_price=cleaned_price.replace("$",""); cleaned_price=cleaned_price.replace("£",""); cleaned_price=cleaned_price.replace("€",""); cleaned_price=cleaned_price.trim();//remove spaces //calcola minimo prezzo if(parseFloat(cleaned_price)< parseFloat(min_price)){ min_price=cleaned_price } //creo link link= document.createElement("a"); if(my_location.toString() === curr_location.toString()){ link.innerText= "<"+ flags[curr_location] + " " + curr_price.replace(".",",")+">"; }else{ link.innerText= "["+ flags[curr_location] + " " + curr_price.replace(".",",")+"]"; } link.href="https://www.amazon."+curr_location+"/dp/"+amz_code; link.style.color="dodgerblue"; link.style.paddingLeft = "5px"; link.style.paddingRight = "5px"; prices.push(link); }else{ //creo link link= document.createElement("a"); if(my_location.toString() === curr_location.toString()){ link.innerText= "<"+ flags[curr_location] + " stock-out>"; }else{ link.innerText= "["+ flags[curr_location] + " stock-out]"; } link.href="https://www.amazon."+curr_location+"/dp/"+amz_code; link.style.color="red"; link.style.paddingLeft = "5px"; link.style.paddingRight = "5px"; //message.style.color="firebrick"; prices.push(link); } } //REMOVE LOADING //price_block.children[0].children[0].removeChild(price_block.children[0].children[0].lastElementChild); //VECCHIO HOOK (che non esiste quando il prezzo è fuori stock) price_block.removeChild(price_block.lastElementChild); //Appen Price Block let tr2 = document.createElement("tr"); let div2 = document.createElement("div"); tr2.append(div2); for(let curr_price_link of prices){ let cleaned_price=curr_price_link.innerText.replace("CO.UK",""); cleaned_price=cleaned_price.replaceAll("🇮🇹",""); cleaned_price=cleaned_price.replaceAll("🇩🇪",""); cleaned_price=cleaned_price.replaceAll("🇫🇷",""); cleaned_price=cleaned_price.replaceAll("🇪🇸",""); cleaned_price=cleaned_price.replaceAll("🇬🇧",""); cleaned_price=cleaned_price.replaceAll("🇺🇸",""); cleaned_price=cleaned_price.replaceAll("🇦🇺",""); cleaned_price=cleaned_price.replaceAll("🇨🇦",""); cleaned_price=cleaned_price.replaceAll(",","."); cleaned_price=cleaned_price.replaceAll("[",""); cleaned_price=cleaned_price.replaceAll("]",""); cleaned_price=cleaned_price.replaceAll("<",""); cleaned_price=cleaned_price.replaceAll(">",""); cleaned_price=cleaned_price.replaceAll("$",""); cleaned_price=cleaned_price.replaceAll("£",""); cleaned_price=cleaned_price.replaceAll("€",""); cleaned_price=cleaned_price.trim();//remove spaces if(parseFloat(cleaned_price)===parseFloat(min_price)){curr_price_link.style.color="green"} div2.append(curr_price_link); } price_block.append(tr2); /*Append "OTHER SELLERS" block let other_seller_link=document.createElement("a") let tr3 = document.createElement("tr"); let div3 = document.createElement("div"); other_seller_link.href="https://www.amazon.it/gp/offer-listing/"+amz_code+"/ref=dp_olp_pn" other_seller_link.innerText="{Force Sellers List}" other_seller_link.style.textAlign = "center" div3.append(other_seller_link); tr3.append(div3); price_block.append(tr3);*/ } } main();