見出し画像

なんでAmazonて送料詐欺の商品の送料隠してるの?送料詐欺転売屋に引っかからないようにするクローム拡張(不完全版)

はいどうも(´・ω・`)n

転売屋は○ねばいいと思ってるSYU@海外放浪フリーランサー https://twitter.com/jackpot__hide です(´・ω・`)

今回は、転売時に、商品価格を普通に設定しておいて、ワンクリック購入とかする人を高額な送料で騙そうとする転売屋に引っかからないようにするクローム拡張を作って配布します( ´・ω・`)

今回もスペシャルサンクスささきくん(´・ω・`)っ

https://twitter.com/sasaki_sskis

ベースのソースコード提供の他、iPhoneでも動くように(まだ出来上がってない)協力してくれてます

あと、このクローム拡張は不安定です。503エラーが発生しやすいので動作の保証はいたしません(`;・ω・´)っ動かなかった人ごめんなさい

さて、でははじめます(`・ω・´)
問題の商品は下のツイートにある通り(`;・ω・´)っ

みてください、送料50万円です(`;・ω・´)っバカじゃないのかと

アマゾンの商品検索をすると(´・ω・`)

画像1

まぁこんな感じで50枚で100円のマスクなんかがあるわけですが、売り切れしないように慌ててクリックすると送料が1万円超えてるのがざらにあるわけです(´・ω・`)b

そこで今回のクローム拡張は

画像2

送料の書いてない商品の送料(複数ある場合には一番高いもの)を持ってきて表示するわけです(´・ω・`)

ただ、これ、多用しすぎると503エラーってので止まってしまうので、マスクやトイレットペーパー検索する時以外はオフにしてください( ´・ω・;`)

ダウンロードは下のurlからお願いします(´・ω・`)

さて、これで安心してマスクの検索ができるかと(´・ω・`)

アクセス規制に引っかかってしまったら、ipアドレスが変わるまで解除されないので、一回拡張機能をオフにした方がいいかもしれません

質問や要望は、ここのコメント欄もしくはツイッターでお願いします(´・ω・`)n

クローム拡張のインストールの仕方がわからない方は

こちらのノートを参考にしてください。
それではみなさん、また(´・ω・`)ノシ

とりあえず、次はこのクローム拡張をiPhoneで動くようにするのと・・・503エラー出さないようにする感じかなぁ( ´・ω・;`)

あ、開発者の方は、コンソールから直接実行できるようにソースを貼っておきます(´・ω・`)っインストールめんどくさいですものね


var style=document.createElement("style");
style.innerHTML+=(function() {/*
[data-asin][data-price]{
   position:relative;
}

[data-asin][data-price]:after{
   content:'最大送料' attr(data-shipping);
   background:rgba(255,0,0,.1);
   border:1px solid gray;
   position:absolute;
   top:3px;
   right:3px;
}


[data-asin][data-sagi='1']{
   background:rgba(255,0,0,.3);
   border:1px solid red;
   pointer-events2:none;
}
[data-asin][data-price][data-check_required='1']:after{
   content:'送料チェック中';
}
[data-asin][data-price][data-check_required='0'] div.qd_container button{
   display:none;
}

[data-asin][data-price][data-check_required='1'] div.qd_container{
   position:absolute;
   background:rgba(255,0,0,.1);
   border:1px solid gray;
   top:3px;
   right:3px;

}

*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
document.body.appendChild(style);

//この上でスタイルを指定しています

//ここは使ってないけど、ajax通信が何本張られてるか確認するのに使います
qd_window={};
qd_window.openHTTPs = 0;
document.body.setAttribute('openHTTPs',qd_window.openHTTPs);


//実際に商品の送料のあるページのhtmlを取りに行きます
function getData(elem,url){
   var xhr = new XMLHttpRequest();
   xhr.open('GET', url, true);
   qd_window.openHTTPs++;
   document.body.setAttribute('openHTTPs',qd_window.openHTTPs);
   xhr.send();
   xhr.onreadystatechange = function() {
       if(this.readyState == 4){
           qd_window.openHTTPs--;
           document.body.setAttribute('openHTTPs',qd_window.openHTTPs);
       }
       if(xhr.readyState === 4 && xhr.status === 200) {
           try{
               dom_perser(elem,xhr.responseText);
           }catch(e){
               console.warn(e);
           }
       }else if(xhr.readyState === 4 && xhr.status === 503){
           alert("アクセス規制を受けました( ´;ω;`)");
//            setTimeout(serialShippingCheck,1000);
       }
   }
}

//通信で取ってきたhtmlをパースして、マークしたりします
function dom_perser(elem,xml){
       var parser = new DOMParser();
       var dom = parser.parseFromString(xml, 'text/html');
       try{
           var shipCost=0;
           var shipCostCaption="";
           var targetD=dom;
           var priceElems=targetD.querySelectorAll(".olpShippingPrice");
           for(var i=0;i<priceElems.length;i++){
               var p=parseInt(priceElems[i].innerText.replace("¥","").replace(",","").trim());
               console.log(p);
               if(p>shipCost){
                   hipCost=p;
                   shipCostCaption=priceElems[i].innerText
                   elem.dataset.shipping=shipCostCaption;
                   elem.dataset.shippingInt=p;
                   if( p > 500 && p > parseInt(elem.dataset.price.replace("¥","").replace(",","").replace(" ","").trim())*5){
                       elem.dataset.sagi=1;
                   }
               }

           }
       }catch(e){
           console.log(e);
       }
       elem.dataset.check_required='0';
       serialShippingCheck();
   }    
   var startFlag=false;
   
//ここで送料のない商品のタグに印をつけます(´・ω・`)
function correctPrice(){
   var productElems=document.querySelectorAll("[data-asin]");
   for(var i=0;i<productElems.length;i++){
       console.log(productElems[i]);
       if(productElems[i].querySelector("[aria-label*='配送料']")){
           console.log(productElems[i].querySelector("[aria-label*='配送料']"))
           continue;
       }
       if(productElems[i].querySelector(".a-color-price, .a-price-whole")){
           productElems[i].dataset.check_required='1';
           productElems[i].dataset.price=productElems[i].querySelector(".a-color-price, .a-price-whole").innerText;
       };
   }
    //即座に通信を始めると503エラー出やすいので500ms待機
   setTimeout(serialShippingCheck,500);
}

//送料のない商品を順番にチェックしていきます
//ここ、一気に非同期でやると503しやすくなります
function serialShippingCheck(){
   var productElem=document.querySelector("[data-check_required='1']");
   if(productElem){
       getData(productElem,"https://www.amazon.co.jp/gp/offer-listing/"+productElem.dataset.asin+"/");
   }
}

correctPrice();

この記事が気に入ったらサポートをしてみませんか?