- // ==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://gf.qytechs.cn/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();