您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
It can let you to read the content you searched in Google.
// ==UserScript== // @name Read Website Content like a Web Crawler // @namespace http://tampermonkey.net/ // @version 0.6 // @description It can let you to read the content you searched in Google. // @author CY Fung // @match https://*/* // @match http://webcache.googleusercontent.com/search?q=* // @match https://webcache.googleusercontent.com/search?q=* // @icon https://upload.cc/i1/2021/10/15/1zIbtQ.png // @grant GM_registerMenuCommand // @run-at document-start // @license MIT // ==/UserScript== (function() { 'use strict'; function getPageURL(url) { if (typeof url != 'string') return null; const m1 = /^https:\/\/www\.signalhire\.com\/sorry\?continue=([^=&]+)/.exec(url); let eurl = ''; // URIComponent if (m1) eurl = m1[1]; try { if (eurl && typeof eurl == 'string') url = decodeURIComponent(eurl); // avoid URI malformed } catch (e) {} return url; } function turnPlain() { const url = getPageURL(location.href); location.href = `https://webcache.googleusercontent.com/search?q=cache:${encodeURI(url)}&strip=1&vwsrc=0`; //not encodeURIComponent } function turnCrawler() { const url = getPageURL(location.href); location.href = `https://webcache.googleusercontent.com/search?q=cache:${encodeURI(url)}`; //not encodeURIComponent } function isValidCachePage() { const m = /https?\:\/\/webcache\.googleusercontent\.com\/search\?(\S+)$/.exec(location.href) if (m && m[1] && typeof m[1] == 'string') { const params = new URLSearchParams(m[1]); const q = params.get('q') if (q && typeof q == 'string') { const m2 = /^cache:([a-zA-Z0-9]+:)?(https?\:\/\/\S+)\s*$/.exec(q) const m2URL = m2 ? m2[2] : null if (m2URL && typeof m2URL == 'string') { let url; try { url = decodeURI(m2URL); } catch (e) { url = m2URL; } return url; } } } return ''; } function turnOriginal() { if (!cacheUrl) return; const url = cacheUrl; location.href = `${url}` } let cacheUrl = '' if (!/^https?\:\/\/webcache\.googleusercontent\.com\//.test(location.href)) { new Promise(() => { GM_registerMenuCommand("Read Plain Content", turnPlain, "P"); GM_registerMenuCommand("Read like Web Crawler", turnCrawler, "C"); }) } else { cacheUrl = isValidCachePage(); if (cacheUrl) { const { documentElement } = document const jb = {}; const mc = (key) => { return { get() { throw `document.${key}`; }, set(newValue) {}, enumerable: true, configurable: false } } for (const key of ['documentElement', 'querySelector', 'querySelectorAll']) { jb[key] = mc(key) } const constVal = (value) => { return { value, enumerable: true, configurable: false } } try { Object.defineProperties(document, jb); } catch (e) {} try { Object.defineProperties(navigator, { 'userAgent': constVal('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'), 'vendor': constVal(""), 'platform': constVal(""), 'appCodeName': constVal(""), 'appName': constVal(""), 'appVersion': constVal(""), 'product': constVal(""), 'productSub': constVal(""), 'language': constVal(""), 'languages': constVal([]), 'geolocation': constVal(null), 'doNotTrack': constVal(null), 'pdfViewerEnabled': constVal(false), 'plugins': constVal(null), }); } catch (e) {} requestAnimationFrame(() => { // Web Crawler don't like fixed elements addStyle(` html body div[class|="fixed"], html body div[class*="-fixed "], html body div[class$="-fixed"]{ top:auto !important; right:auto !important; left:auto !important; bottom:auto !important; } `, documentElement); }); new Promise(() => { GM_registerMenuCommand("Read Original", turnOriginal, "O"); }) } } function addStyle(styleText, container) { const styleNode = document.createElement('style'); //styleNode.type = 'text/css'; styleNode.textContent = styleText; (container || document.documentElement).appendChild(styleNode); return styleNode; } })();