Last active
December 4, 2023 06:51
-
-
Save 100nandoo/dd6fede410eff3597f6ed63af3246e7b to your computer and use it in GitHub Desktop.
Sort Shopee by top sales of all times
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Sort | |
// @namespace Violentmonkey Scripts | |
// @match https://shopee.sg/* | |
// @grant none | |
// @version 0.1 | |
// @author 100nandoo | |
// @run-at document-end | |
// @require https://cdn.jsdelivr.net/npm/@violentmonkey/dom@1 | |
// @require https://cdn.jsdelivr.net/npm/@violentmonkey/dom@2 | |
// @require https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js | |
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js | |
// @description 8/6/2022, 1:38:33 PM | |
// ==/UserScript== | |
(function () { | |
const parentSelector = ".shopee-search-item-result__items" | |
const itemSelector = ".shopee-search-item-result__item" | |
const terjualSelector = "div.sdJLPr.MbhsP1" | |
const urutkanSelector = "div.shopee-sort-by-options" | |
const sortButtonClass = "shopee-sort-by-options__option" | |
const sortButtonId = "sort-button" | |
'use strict'; | |
window.addEventListener('load', function () { | |
console.log("page loaded "); | |
const urutkan = document.querySelector(urutkanSelector) | |
console.log("urutkan " + urutkan); | |
runWhenReady(urutkanSelector, addButtonNew) | |
function addButtonNew(parent) { | |
const sortButton = createDiv(); | |
parent.appendChild(sortButton); | |
sortButton.addEventListener('click', sortBySold); | |
} | |
function sortBySold() { | |
const sortButton = document.getElementById(sortButtonId); | |
sortButton.classList.add('shopee-sort-by-options__option--selected'); | |
let items = document.querySelectorAll(itemSelector); | |
var sortedByTerjual = [...items]; | |
console.log("sortedByTerjual " + sortedByTerjual); | |
let hasil = filterEmpty(sortedByTerjual) | |
console.log("hasil " + hasil); | |
hasil.sort(sortTerjual); | |
const parent = document.querySelector(parentSelector); | |
//console.log("parent " + parent); | |
parent.innerHTML = ''; | |
parent.append(...hasil); | |
console.log("Urutkan berdasarkan pembelian terbanyak!!"); | |
} | |
}, false); | |
// Low Level Function used by sortBySold | |
function filterEmpty(items) { | |
return items.filter(item => { | |
let terjual = item.querySelector(terjualSelector) | |
console.log("terjual " + terjual); | |
return terjual != null | |
}); | |
} | |
function sortTerjual(a, b) { | |
const terjualA = a.querySelector(terjualSelector); | |
const textA = convertTerjual(terjualA); | |
terjualA.innerText = textA; | |
const terjualB = b.querySelector(terjualSelector); | |
const textB = convertTerjual(terjualB); | |
terjualB.innerText = textB; | |
return textB - textA; | |
} | |
function convertTerjual(element) { | |
const number = element.textContent.replace("sold", ""); | |
console.log(number) | |
const multiplier = (number.split("k").length - 1) == 0 ? 1 : 1000; | |
const numericPart = parseFloat(number); | |
if (isNaN(numericPart)) { | |
// Handle invalid strings | |
console.error(`Invalid string: ${number}`); | |
return null; | |
} | |
return numericPart * multiplier; | |
} | |
function createDiv() { | |
var newDiv = document.createElement('div'); | |
// Set the content or attributes of the new div if needed | |
newDiv.innerHTML = 'Top Sales All Time'; | |
newDiv.className = sortButtonClass; | |
newDiv.id = sortButtonId; | |
return newDiv | |
} | |
function runWhenReady(readySelector, callback) { | |
var numAttempts = 0; | |
var tryNow = function () { | |
var elem = document.querySelector(readySelector); | |
if (elem) { | |
callback(elem); | |
} else { | |
numAttempts++; | |
if (numAttempts >= 34) { | |
console.warn('Giving up after 34 attempts. Could not find: ' + readySelector); | |
} else { | |
setTimeout(tryNow, 250 * Math.pow(1.1, numAttempts)); | |
} | |
} | |
}; | |
tryNow(); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment