Skip to content

Instantly share code, notes, and snippets.

@100nandoo
Last active December 4, 2023 06:51
Show Gist options
  • Save 100nandoo/dd6fede410eff3597f6ed63af3246e7b to your computer and use it in GitHub Desktop.
Save 100nandoo/dd6fede410eff3597f6ed63af3246e7b to your computer and use it in GitHub Desktop.
Sort Shopee by top sales of all times
// ==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