// ==UserScript==
// @name Amazon采集
// @namespace https://blog.csdn.net/mukes
// @version 0.0.1
// @description 亚马逊采集
// @author Fux
// @match *.amazon.com*dp/*
// @match *.test.mytool.maykis.cn/*
// @match *.gather.mytool.maykis.cn/*
// @match *.walmart.com/ip/*
// @grant GM_xmlhttpRequest
// @connect *
// @downloadURL https://update.greasyfork.icu/scripts/485196/Amazon%E9%87%87%E9%9B%86.user.js
// @updateURL https://update.greasyfork.icu/scripts/485196/Amazon%E9%87%87%E9%9B%86.meta.js
// ==/UserScript==
(function() {
//插件登录页面
function loginInterface(){
let loginContainer = document.createElement('div');
loginContainer.id = "sp-ac-container";
loginContainer.style.position="fixed"
loginContainer.style.left="70%"
loginContainer.style.top="20px"
loginContainer.style['z-index']="999999"
//loginContainer.style.border="2px solid black"
//loginContainer.style["border-radius"]="10px"
loginContainer.innerHTML =`
登录插件
`
document.body.appendChild(loginContainer);//生成插件悬浮窗
var loginButton = document.getElementById("loginButtom")
loginButton.addEventListener("click", loginBottonClick) //监听按钮点击事件
function loginBottonClick(){
username = document.getElementById("username").value;
password = document.getElementById("password").value;
var loginUrl="https://test.mytool.maykis.cn/ums/oauth/token?username="+username+"&grant_type=password&scope=all&manageCompanyId=2000000001&password="+password+"&auth_type=user"
var loginData="username="+username+"&grant_type=password&scope=all&manageCompanyId=2000000001&password="+password+"&auth_type=user"
requestsHtml(loginUrl,loginData);//发起登录请求获取Authorization
}
}
//插件功能页面
function operatingInterface(){
let operatingContainer = document.createElement('div');
operatingContainer.id = "operating-container";
operatingContainer.style.position="fixed"
operatingContainer.style.left="70%"
operatingContainer.style.top="20px"
operatingContainer.style['z-index']="999999"
operatingContainer.innerHTML =`
`
document.body.appendChild(operatingContainer);//生成插件悬浮窗
var gatherButton = document.getElementById("gatherButtom")//获取采集按钮
gatherButton.addEventListener("click", gatherButtonClick) //监听按钮采集按钮点击事件
var quitButton = document.getElementById("quitButtom")//获取退出按钮
quitButton.addEventListener("click", quitBottonClick) //监听退出按钮点击事件
function quitBottonClick(){
console.log("退出登录!");
localStorage.removeItem("username")//删除username
localStorage.removeItem("password")//删除password
localStorage.removeItem("Authorization")//删除Authorization
document.getElementById("operating-container").remove();//去除功能界面
loginInterface()//打开登录界面
}
}
//loginInterface()//登录界面
//operatingInterface()//功能界面
var headers={
"Host":"test.mytool.maykis.cn",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
"Accept":"application/json, text/plain, */*",
"Accept-Language":"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding":"gzip, deflate, br",
"Authorization":"Basic bWJzOm1ic3NlY3JldA==",
"Access-Control-Allow-Origin":"*",
"vc":"oauth",
"auth":"0",
"Origin":"https://test.mytool.maykis.cn",
"DNT":"1",
"Sec-GPC":"1",
"Connection":"keep-alive",
"Referer":"https://test.mytool.maykis.cn/mbs/",
"Sec-Fetch-Dest":"empty",
"Sec-Fetch-Mode":"cors",
"Sec-Fetch-Site":"same-origin",
"Pragma":"no-cache",
"Cache-Control":"no-cache",
"Content-Length": "0"
}
//登录请求函数
function requestsHtml(requestUrl,requestsData){
GM_xmlhttpRequest({
method: "POST",
url:requestUrl,
headers:headers ,
data:requestsData,
onload: function(response){
console.log(response.responseText)
var resData=JSON.parse(response.responseText)
if (resData.success==false){
console.log("登录失败");
alert(resData.errmsg)
}else{
alert("登录成功")
Authorization="bearer "+JSON.parse(response.responseText).access_token
localStorage.setItem("username", username);//设置账号
localStorage.setItem("password", password);//设置密码
localStorage.setItem("Authorization", Authorization)//设置Authorization
console.log("登录成功!");
console.log("username:",username);
console.log("password:",password);
console.log(Authorization)
document.getElementById("sp-ac-container").remove();//去除登录界面
operatingInterface();//开启功能界面
}
},
onerror: function(response){
alert("登录失败")
console.log("请求失败");
//localStorage.setItem("Authorization", false)//设置Authorization
}
});
};
//采集按钮触发
function gatherButtonClick(){
if (hostUrl=="www.amazon.com"){
extractAmazonData();
}else if((hostUrl=="www.walmart.com")){
alert("暂不支持沃尔玛")
//extractWalmartData()
}
}
//采集Amazon提取数据
function extractAmazonData(){
setTimeout(function(){
var pagesource=document.documentElement.outerHTML;
//console.log(pagesource);//获取网页源码
var title
try {
title=document.getElementById("productTitle").innerHTML; //提取标题
} catch (e) {
title="";
}
console.log("title:",title);
var categoryName//提取类目
try {
categoryName=document.getElementsByClassName("a-link-normal a-color-tertiary")[1].innerHTML; //提取类目
} catch (e) {
categoryName="";
}
console.log("categoryName:",categoryName);
var price //提取价格
try {
price=document.getElementById("priceValue").value; //提取价格
//price=document.getElementsByClassName("a-section a-spacing-none aok-align-center aok-relative")[0].getElementsByClassName("aok-offscreen")[0].innerHTML; //提取价格
} catch (e) {
price=0;
}
console.log("price:",price);
//console.log(keyFeaturesList);
var keyFeatures=new Array();//创建keyFeatures数组
try {
var keyFeaturesList=document.getElementById("feature-bullets").getElementsByClassName("a-list-item"); //提取描述
for(let item of keyFeaturesList) {
//console.log(item.innerHTML);
keyFeatures.push(item.innerHTML);
};
} catch (e) {
keyFeatures=[];
}
console.log("keyFeatures:",keyFeatures);
var mainImageUrl//提取主图
try {
mainImageUrl=document.getElementById("imgTagWrapperId").getElementsByTagName("img")[0].src; //提取主图
} catch (e) {
mainImageUrl="";
}
console.log("mainImageUrl:",mainImageUrl);
var brand//提取品牌
try {
brand=document.getElementById("bylineInfo").innerHTML.replaceAll("Brand:",""); //提取品牌
} catch (e) {
brand="";
}
console.log("brand:",brand);
var packageWeight=""//提取Item Weight
var productDimensions=""//提取Product Dimensions
var bsrRanking=0//提取 Best Sellers Rank
var sellerRegion=""//提取 Country of Origin
var uploadTime=0//提取 Date First Available
var productDetails=[]
try{
productDetails=document.getElementById("productDetails_detailBullets_sections1").getElementsByTagName("tr"); //提取productDetails
}catch (e) {
productDetails=[];
}
for(let item of productDetails){
if(item.getElementsByClassName("a-color-secondary a-size-base prodDetSectionEntry")[0].innerHTML.includes("Item Weight")){
packageWeight=item.getElementsByTagName("td")[0].innerHTML;}//提取Item Weight
else if(item.getElementsByClassName("a-color-secondary a-size-base prodDetSectionEntry")[0].innerHTML.includes("Product Dimensions")){
productDimensions=item.getElementsByTagName("td")[0].innerHTML;//提取Product Dimensions
}else if(item.getElementsByClassName("a-color-secondary a-size-base prodDetSectionEntry")[0].innerHTML.includes("Item Display Dimensions")){
productDimensions=item.getElementsByTagName("td")[0].innerHTML;//提取Product Dimensions
}else if(item.getElementsByClassName("a-color-secondary a-size-base prodDetSectionEntry")[0].innerHTML.includes("Best Sellers Rank")){
bsrRanking=item.getElementsByTagName("td")[0].innerHTML.split("#")[1].split(" in")[0].replaceAll(",","");//提取 Best Sellers Rank
}else if(item.getElementsByClassName("a-color-secondary a-size-base prodDetSectionEntry")[0].innerHTML.includes("Country of Origin")){
sellerRegion=item.getElementsByTagName("td")[0].innerHTML;//提取 Country of Origin
}else if(item.getElementsByClassName("a-color-secondary a-size-base prodDetSectionEntry")[0].innerHTML.includes("Date First Available")){
uploadTime=item.getElementsByTagName("td")[0].innerHTML;//提取 Date First Available
};
//console.log(item.innerHTML);
//keyFeatures.push(item.innerHTML);
};
try{
uploadTime = new Date(uploadTime).getTime();//将时间转化为时间戳
}catch(e){
}
console.log("Item Weight:",packageWeight);
console.log("Product Dimensions:"+productDimensions);
console.log("Best Sellers Rank:"+bsrRanking);
console.log("Country of Origin:"+sellerRegion);
console.log("Date First Available:"+uploadTime);
var commodityStar//提取星级
try {
commodityStar=document.getElementById("acrPopover").title.split(" out")[0]; //提取星级
} catch (e) {
commodityStar=0;
}
console.log("commodityStar:"+commodityStar);
var imgList=new Array();//提取副图
try{
var data=JSON.parse(pagesource.match(/'colorImages': \{ 'initial':(.*)\},/)[1]);
for(let img of data){
if (img.hiRes === null){
imgList.push(img.large);
}else{
imgList.push(img.hiRes)
};
};
}catch (e){
imgList=[]
}
console.log("imgList",imgList);
var store//提取商品库存
try {
store=document.getElementById("availability").getElementsByTagName("span")[0].innerHTML;//提取商品库存
} catch (e) {
store="";
}
if (store.includes("In")||store.includes("Qty")){
store="有库存";
}else if(store.includes("Only")){
store="少量库存";
}else if(store.includes("Out")||store.includes("out")||store.includes("Currently unavailable")||store.trim()===""){
store="无库存";
}else{
store="有库存";
}
console.log("store:",store);
var description
try {
description=document.getElementById("productDescription").getElementsByTagName("span")[0].innerHTML;//提取商品描述
} catch (e) {
description=document.getElementById("aplus_feature_div").innerText;//提取商品描述
}
console.log("description:",description);
//var deliveryMethod=pagesource.match(/>Sold by(.*?)