您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Base library
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/461948/1162272/FBase%20Lib.js
// ==UserScript== // @name FBase Lib // @description Base library // @version 0.0.1 // ==/UserScript== const FOUR_MINUTES = 4 * 60 * 1000; const wait = ms => new Promise(resolve => setTimeout(resolve, ms || 3000)); Element.prototype.isVisible = function() { return !!(this.offsetWidth||this.offsetHeight||this.getClientRects().length); }; Element.prototype.isUserFriendly = function(selector) { let e = selector ? this.querySelector(selector) : this; return e && e.isVisible() ? e : null; }; Document.prototype.isUserFriendly = Element.prototype.isUserFriendly; class CrawlerWidget { constructor(params) { if (!params || !params.selector) { throw new Error('CrawlerWidget requires a selector parameter'); } this.context = this.context || document; Object.assign(this, params); } get isUserFriendly() { this.element = this.context.isUserFriendly(this.selector); return this.element; } } class CaptchaWidget extends CrawlerWidget { constructor(params) { super(params); } solve() { return true; } async isSolved() { return false; } } class HCaptchaWidget extends CaptchaWidget { constructor(params) { let defaultParams = { selector: '.h-captcha > iframe', waitMs: [1000, 5000], timeoutMs: FOUR_MINUTES }; for (let p in params) { defaultParams[p] = params[p]; } super(defaultParams); } async isSolved() { return wait().then( () => { if (this.isUserFriendly && this.element.hasAttribute('data-hcaptcha-response') && this.element.getAttribute('data-hcaptcha-response').length > 0) { return Promise.resolve(true); } return this.isSolved(); }); } }