您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically loads all items on Instacart sales pages and sorts them by price (low to high). No user interface.
// ==UserScript== // @name Instacart Automated Sort & Load // @description Automatically loads all items on Instacart sales pages and sorts them by price (low to high). No user interface. // @version 2.2 // @license MIT // @match https://*.instacart.ca/* // @match https://*.instacart.com/* // @grant none // @namespace https://greasyfork.org/en/users/1428059-dexteon // ==/UserScript== (function () { "use strict"; let maxLoadMoreClicks = Infinity; // Default: Unlimited "Load More" clicks let loadMoreClickCount = 0; // Helper function to scroll to an element function scrollToElement(element) { element.scrollIntoView({ behavior: "smooth", block: "center" }); } // Function to click the "Load More" button function autoLoadMore(callback) { const loadMoreButton = document.querySelector('.e-1sdcacc .e-1opyh2e'); // Selector for "Load More" button if (loadMoreButton && loadMoreClickCount < maxLoadMoreClicks) { console.log("Clicking 'Load More' button..."); scrollToElement(loadMoreButton); loadMoreButton.click(); loadMoreClickCount++; // Wait 3 seconds before checking again setTimeout(() => autoLoadMore(callback), 3000); } else if (loadMoreClickCount >= maxLoadMoreClicks) { console.log(`Reached max 'Load More' clicks (${maxLoadMoreClicks}).`); callback(); // Call the sorting function when done } else { console.log("No more 'Load More' button found. Proceeding to sorting..."); if (callback) callback(); } } // Function to sort products by price function sortProducts() { const productContainer = document.querySelector("#store-wrapper ul"); // Update this selector if necessary if (!productContainer) { console.error("Product container not found."); return; } const productItems = Array.from(productContainer.querySelectorAll("li")); // Adjust selector if needed if (productItems.length === 0) { console.error("No products found to sort."); return; } const pricePattern = /[\d,.]+/; // Extract prices and sort items const sortedItems = productItems .map((item) => { const priceElement = item.querySelector("[class*='price']"); // Adjust selector for price const priceText = priceElement?.textContent.match(pricePattern); const price = priceText ? parseFloat(priceText[0].replace(/,/g, "")) : Infinity; return { item, price }; }) .sort((a, b) => a.price - b.price); // Sort low to high // Clear container and reappend sorted items productContainer.innerHTML = ""; sortedItems.forEach(({ item }) => productContainer.appendChild(item)); console.log("Products sorted by price (low to high)."); } // Scroll to top of the page function scrollToTop() { console.log("Scrolling to the top of the page..."); window.scrollTo({ top: 0, behavior: "smooth" }); } // Main function to execute the process function main() { console.log("Starting automated loading and sorting..."); autoLoadMore(() => { sortProducts(); // Sort products after all items are loaded scrollToTop(); // Scroll to the top of the page }); } // Run the script main(); })();