// ==UserScript==
// @name Get Rank in Taobao
// @description Get product search rank in taobao.com
// @author lib
// @namespace https://lib.org
// @homepageURL https://greasyfork.org/zh-CN/scripts/391705-get-rank-in-taobao
// @supportURL https://github.com/ace1573/tb-rank
// @license MIT
// @include /^https?://s.taobao.com/search\?.+/
// @grant none
// @run-at document-idle
// @date 29/10/2019
// @modified 12/11/2019
// @version 0.0.6
// @downloadURL https://update.greasyfork.icu/scripts/391705/Get%20Rank%20in%20Taobao.user.js
// @updateURL https://update.greasyfork.icu/scripts/391705/Get%20Rank%20in%20Taobao.meta.js
// ==/UserScript==
! function() {
"use strict";
//插入界面
document.body.insertAdjacentHTML('beforeend', `
`);
//点击事件
document.getElementById('_rnk_start').onclick = ()=>{
getRanks().then()
}
}();
//返回的当前页数
async function getCurrPage(){
while(!document.querySelector('.m-page li.active span.num')){
await _sleep(100)
}
//访问验证
while(document.querySelector(".sufei-tb-dialog:not(.sufei-tb-dialog-hidden)")){
await _sleep(200)
}
let node = document.querySelector('.m-page li.active span.num')
let page = node.innerHTML
console.log('curr page', page)
return parseInt(page)
}
//取初始化数据
function getDatas(){
if(window.__rnk_datas) return window.__rnk_datas
//初始化
let result = window.__rnk_datas = { products: {}, ranks: {} }
result.products = getProductFromInput()
return result
}
//解析输入
function getProductFromInput(){
let products = {}
try {
let _rnk_products = document.getElementById('_rnk_products').value
for(let item of _rnk_products.split('\n')){
let arr = item.split(/\s+/g)
let key = arr[0].trim()
let val = arr[1].trim()
if(key) products[key] = val
}
} catch (error) {
alert(`输入格式错误`)
throw error
}
return products
}
//.m-page li.active span.num //当前页
//.m-page li.next a 下一页
//遍历商品获取排名
async function getRanks(){
let currPage = await getCurrPage()
//产品 排名
let { products, ranks } = getDatas()
console.log(`products`, products)
let list = document.querySelectorAll('#mainsrp-itemlist .pic-box-inner .pic a')
let invalidCount = 0//无效商品数
for(let i=0; i')
let nextPageNode = document.querySelector('.m-page li.next a')
if(finished || currPage > 100 || !nextPageNode){
if(!result.length) return alert(`搜索完毕 没有找到结果`)
alert('搜索完毕 查看--->')
}else{//保存起来
console.log('curr result', result)
console.log('to next page')
await _sleep(800)//延时
nextPageNode.click()//下一页
await _sleep(500)
await getRanks()
}
}
//睡眠
function _sleep(mills){
return new Promise((resolve,reject)=>{
setTimeout(resolve, mills)
})
}
//获取url参数
function _getUrlParam(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}