您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Scrapes and displays data from the web page based on rules.
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/471264/1222741/MagicScraper.js
// ==UserScript== // @name MagicScraper // @namespace http://tampermonkey.net/ // @version 0.1 // @description Scrapes and displays data from the web page based on rules. // @author aolko // @match *://*/* // @grant GM_addStyle // ==/UserScript== function scraper(rules, options = {}) { function createDOMFromScrapedData(data, element, keepChildren) { for (const key in data) { if (typeof data[key] === 'string') { const newElement = document.createElement(element.tagName); newElement.innerHTML = data[key]; if (keepChildren && element.children.length > 0) { Array.from(element.children).forEach(child => { newElement.appendChild(child); }); } element.appendChild(newElement); } else if (typeof data[key] === 'object') { const newElement = document.createElement(element.tagName); element.appendChild(newElement); createDOMFromScrapedData(data[key], newElement, keepChildren); } } } function matchPageOrDomain(pattern, current) { if (pattern === '*' || pattern === current) return true; const regexPattern = new RegExp(`^${pattern.replace('*', '.*')}$`, 'i'); return regexPattern.test(current); } function scrapeDataByRules(rulesObj, currentDomain, currentPage) { const resolvedRules = JSON.parse( JSON.stringify(rulesObj).replace(/:curDomain/g, currentDomain).replace(/:curPage/g, currentPage) ); const domainRules = Object.keys(resolvedRules).find(domainPattern => matchPageOrDomain(domainPattern, currentDomain) ); if (!domainRules) return {}; const domainData = resolvedRules[domainRules]; const pageData = Object.keys(domainData.pages || {}).find(pagePattern => matchPageOrDomain(pagePattern, currentPage) ); const scrapedData = Object.assign({}, domainData, pageData ? domainData.pages[pageData] : {}); return scrapedData; } function loadExternalRules(externalRulesURL, currentDomain, currentPage, callback) { fetch(externalRulesURL) .then(response => response.json()) .then(data => { const rulesObj = data.rules || {}; const scrapedData = scrapeDataByRules(rulesObj, currentDomain, currentPage); callback(scrapedData); }) .catch(err => { console.error('Error loading external rules:', err); callback({}); }); } function runScraping() { const currentDomain = window.location.hostname; const currentPage = window.location.pathname; let pageRules; if (typeof rules === 'string') { // Load external rules if the rules parameter is a URL string loadExternalRules(rules, currentDomain, currentPage, scrapedData => { pageRules = scrapedData; handleRules(pageRules); }); } else { pageRules = scrapeDataByRules(rules, currentDomain, currentPage); handleRules(pageRules); } } function handleRules(pageRules) { if (Object.keys(pageRules).length === 0) { console.warn('No rules found for the current domain and page.'); return; } const fragment = document.createDocumentFragment(); createDOMFromScrapedData(pageRules, fragment, options.keepChildren); document.body.innerHTML = ''; document.body.appendChild(fragment); } runScraping(); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址