您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Search for items on Google Shopping with various filters and sorting options.
// ==UserScript== // @name Enhanced Google Shopping Search // @namespace http://tampermonkey.net/ // @version 1.0 // @description Search for items on Google Shopping with various filters and sorting options. // @match *://*/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Create UI elements const container = document.createElement('div'); container.style.position = 'fixed'; container.style.top = '50%'; container.style.right = '-500px'; container.style.zIndex = '1000'; container.style.backgroundColor = '#333'; container.style.color = '#fff'; container.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)'; container.style.padding = '10px'; container.style.border = '1px solid #ccc'; container.style.borderRadius = '5px'; container.style.width = '300px'; container.style.transform = 'translateY(-50%)'; container.style.transition = 'right 0.3s'; const inputBox = document.createElement('input'); inputBox.type = 'text'; inputBox.placeholder = 'Enter search terms...'; inputBox.style.display = 'block'; inputBox.style.marginBottom = '10px'; inputBox.style.width = '100%'; inputBox.style.backgroundColor = '#444'; inputBox.style.color = '#fff'; inputBox.style.border = '1px solid #555'; const minPrice = document.createElement('input'); minPrice.type = 'number'; minPrice.placeholder = 'Min price'; minPrice.style.display = 'block'; minPrice.style.marginBottom = '10px'; minPrice.style.width = '100%'; minPrice.style.backgroundColor = '#444'; minPrice.style.color = '#fff'; minPrice.style.border = '1px solid #555'; const maxPrice = document.createElement('input'); maxPrice.type = 'number'; maxPrice.placeholder = 'Max price'; maxPrice.style.display = 'block'; maxPrice.style.marginBottom = '10px'; maxPrice.style.width = '100%'; maxPrice.style.backgroundColor = '#444'; maxPrice.style.color = '#fff'; maxPrice.style.border = '1px solid #555'; const sortSelect = document.createElement('select'); const sortOptions = { 'r': 'Relevance', 'pd': 'Price: High to Low', 'p': 'Price: Low to High', 'rv': 'Review Score' }; for (const [value, text] of Object.entries(sortOptions)) { const option = document.createElement('option'); option.value = value; option.textContent = text; sortSelect.appendChild(option); } sortSelect.style.display = 'block'; sortSelect.style.marginBottom = '10px'; sortSelect.style.width = '100%'; sortSelect.style.backgroundColor = '#444'; sortSelect.style.color = '#fff'; sortSelect.style.border = '1px solid #555'; const conditionSelect = document.createElement('select'); const conditionOptions = { '1': 'New', '3': 'Used', 'both': 'Both' }; for (const [value, text] of Object.entries(conditionOptions)) { const option = document.createElement('option'); option.value = value; option.textContent = text; conditionSelect.appendChild(option); } conditionSelect.style.display = 'block'; conditionSelect.style.marginBottom = '10px'; conditionSelect.style.width = '100%'; conditionSelect.style.backgroundColor = '#444'; conditionSelect.style.color = '#fff'; conditionSelect.style.border = '1px solid #555'; const filterContainer = document.createElement('div'); filterContainer.style.display = 'flex'; filterContainer.style.justifyContent = 'space-between'; filterContainer.style.marginBottom = '10px'; const freeShippingLabel = document.createElement('label'); freeShippingLabel.textContent = 'Free Shipping'; const freeShippingCheckbox = document.createElement('input'); freeShippingCheckbox.type = 'checkbox'; freeShippingCheckbox.style.marginLeft = '10px'; freeShippingLabel.appendChild(freeShippingCheckbox); const freeReturnsLabel = document.createElement('label'); freeReturnsLabel.textContent = 'Free Returns'; const freeReturnsCheckbox = document.createElement('input'); freeReturnsCheckbox.type = 'checkbox'; freeReturnsCheckbox.style.marginLeft = '10px'; freeReturnsLabel.appendChild(freeReturnsCheckbox); const fastShippingLabel = document.createElement('label'); fastShippingLabel.textContent = '1-3 Day Delivery'; const fastShippingCheckbox = document.createElement('input'); fastShippingCheckbox.type = 'checkbox'; fastShippingCheckbox.style.marginLeft = '10px'; fastShippingLabel.appendChild(fastShippingCheckbox); filterContainer.appendChild(freeShippingLabel); filterContainer.appendChild(freeReturnsLabel); filterContainer.appendChild(fastShippingLabel); const ratingSelect = document.createElement('select'); const ratingOptions = { '': 'Any Rating', '100': '1 Star & Up', '200': '2 Stars & Up', '300': '3 Stars & Up', '400': '4 Stars & Up' }; for (const [value, text] of Object.entries(ratingOptions)) { const option = document.createElement('option'); option.value = value; option.textContent = text; ratingSelect.appendChild(option); } ratingSelect.style.display = 'block'; ratingSelect.style.marginBottom = '10px'; ratingSelect.style.width = '100%'; ratingSelect.style.backgroundColor = '#444'; ratingSelect.style.color = '#fff'; ratingSelect.style.border = '1px solid #555'; const searchButton = document.createElement('button'); searchButton.textContent = 'Search'; searchButton.style.display = 'block'; searchButton.style.marginBottom = '10px'; searchButton.style.width = '100%'; searchButton.style.backgroundColor = '#555'; searchButton.style.color = '#fff'; searchButton.style.border = '1px solid #666'; const historyDiv = document.createElement('div'); historyDiv.style.marginTop = '10px'; container.appendChild(inputBox); container.appendChild(minPrice); container.appendChild(maxPrice); container.appendChild(sortSelect); container.appendChild(conditionSelect); container.appendChild(filterContainer); container.appendChild(ratingSelect); container.appendChild(searchButton); container.appendChild(historyDiv); document.body.appendChild(container); let searchHistory = JSON.parse(localStorage.getItem('searchHistory')) || []; function updateHistoryDiv() { historyDiv.innerHTML = '<strong>Recent Searches:</strong><br>'; searchHistory.slice(0, 5).forEach((search, index) => { const searchItem = document.createElement('div'); searchItem.textContent = `${index + 1}. ${search}`; historyDiv.appendChild(searchItem); }); } updateHistoryDiv(); searchButton.addEventListener('click', () => { const searchTerms = inputBox.value; const min = minPrice.value; const max = maxPrice.value; const sort = sortSelect.value; const condition = conditionSelect.value; const freeShipping = freeShippingCheckbox.checked; const freeReturns = freeReturnsCheckbox.checked; const fastShipping = fastShippingCheckbox.checked; const rating = ratingSelect.value; if (searchTerms) { let query = `https://www.google.com/search?sca_upv=1&tbm=shop&q=${encodeURIComponent(searchTerms)}&tbs=mr:1,price:1`; if (min) { query += `,ppr_min:${min}`; } if (max) { query += `,ppr_max:${max}`; } if (sort) { query += `,p_ord:${sort}`; } if (condition !== 'both') { query += `,new:${condition}`; } if (freeShipping) { query += `,ship:1`; } if (freeReturns) { query += `,free_return:1`; } if (fastShipping) { query += `,shipspeed:3`; } if (rating) { query += `,avg_rating:${rating}`; } // Update search history searchHistory.unshift(searchTerms); localStorage.setItem('searchHistory', JSON.stringify(searchHistory)); updateHistoryDiv(); window.location.href = query; } else { alert('Please enter search terms.'); } }); // Show or hide the menu when pressing Ctrl + Alt + G document.addEventListener('keydown', (e) => { if (e.ctrlKey && e.altKey && e.key === 'g') { if (container.style.right === '0px') { container.style.right = '-500px'; } else { container.style.right = '0px'; } } }); })();