您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically clicks the "I'm not a robot" checkbox on reCaptcha V2, reCaptcha V2 callback, reCaptcha V2 Enterprise, and hCaptcha captchas
- // ==UserScript==
- // @name Auto Click "I'm not a robot"
- // @namespace http://tampermonkey.net/
- // @version 0.9
- // @description Automatically clicks the "I'm not a robot" checkbox on reCaptcha V2, reCaptcha V2 callback, reCaptcha V2 Enterprise, and hCaptcha captchas
- // @author JJJ
- // @match *://*/*
- // @icon https://pngimg.com/uploads/robot/robot_PNG96.png
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function () {
- 'use strict';
- // Constants for selectors and attributes
- const CHECKBOX = "#checkbox";
- const ARIA_CHECKED = "aria-checked";
- // Utility function to select a single element
- function qSelector(selector) {
- return document.querySelector(selector);
- }
- // Utility function to check if an element is hidden
- function isHidden(el) {
- return (el.offsetParent === null);
- }
- // Handler for reCaptcha V2
- const reCaptchaV2Handler = {
- // Find the checkbox element for reCaptcha V2
- findCheckboxElement() {
- return document.querySelector('.recaptcha-checkbox-border') ||
- document.querySelector('[role="checkbox"][aria-labelledby="recaptcha-anchor-label"]') ||
- qSelector(CHECKBOX);
- },
- // Solve the reCaptcha V2 by clicking the checkbox
- solve() {
- const checkbox = this.findCheckboxElement();
- if (checkbox && !isHidden(checkbox) && checkbox.getAttribute(ARIA_CHECKED) !== "true") {
- checkbox.click();
- }
- }
- };
- // Handler for reCaptcha V2 callback
- const reCaptchaV2CallbackHandler = {
- // Find the callback function for reCaptcha V2
- findCallbackFunction() {
- if (typeof ___grecaptcha_cfg !== 'undefined') {
- const keys = Object.keys(___grecaptcha_cfg.clients).filter(key => key !== 'load');
- for (const key of keys) {
- const client = ___grecaptcha_cfg.clients[key];
- if (client && typeof client.hl?.l?.callback === 'function') {
- return client.hl.l.callback;
- }
- }
- }
- return null;
- },
- // Solve the reCaptcha V2 by invoking the callback function
- solve() {
- const callbackFn = this.findCallbackFunction();
- if (typeof callbackFn === 'function') {
- callbackFn();
- }
- }
- };
- // Handler for reCaptcha V2 Enterprise
- const reCaptchaV2EnterpriseHandler = {
- // Find the checkbox element for reCaptcha V2 Enterprise
- findEnterpriseCheckboxElement() {
- return document.querySelector('.enterprise-checkbox') ||
- document.querySelector('[aria-labelledby="recaptcha-accessible-status"]');
- },
- // Solve the reCaptcha V2 Enterprise by clicking the checkbox
- solve() {
- const checkbox = this.findEnterpriseCheckboxElement();
- if (checkbox && !isHidden(checkbox) && checkbox.getAttribute(ARIA_CHECKED) !== "true") {
- checkbox.click();
- }
- }
- };
- // Handler for hCaptcha
- const hCaptchaHandler = {
- // Find the checkbox element for hCaptcha
- findCheckboxElement() {
- return document.querySelector('.hcaptcha-checkbox') ||
- document.querySelector('[aria-labelledby="hcaptcha-anchor-label"]');
- },
- // Solve the hCaptcha by clicking the checkbox
- solve() {
- const checkbox = this.findCheckboxElement();
- if (checkbox && !isHidden(checkbox) && checkbox.getAttribute(ARIA_CHECKED) !== "true") {
- checkbox.click();
- }
- }
- };
- // Main captcha solver that tries to solve all types of captchas
- const captchaSolver = {
- solve() {
- reCaptchaV2Handler.solve();
- reCaptchaV2CallbackHandler.solve();
- reCaptchaV2EnterpriseHandler.solve();
- hCaptchaHandler.solve();
- }
- };
- // Initialize a MutationObserver to detect changes in the DOM
- function initializeObserver() {
- const observer = new MutationObserver((mutations) => {
- for (const mutation of mutations) {
- if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
- captchaSolver.solve();
- }
- }
- });
- observer.observe(document.body, { childList: true, subtree: true });
- }
- // Initialize the script
- function init() {
- captchaSolver.solve();
- // Periodically try to solve captchas
- setInterval(() => {
- captchaSolver.solve();
- }, 1000);
- }
- // Check if the document is still loading
- if (document.readyState === 'loading') {
- document.addEventListener('DOMContentLoaded', () => {
- initializeObserver();
- init();
- });
- } else {
- initializeObserver();
- init();
- }
- // Compatibility check for supported browsers
- const userAgent = navigator.userAgent.toLowerCase();
- const isCompatibleBrowser = ['chrome', 'edg', 'brave', 'firefox'].some(browser => userAgent.includes(browser));
- console.log(isCompatibleBrowser ? 'Running on a compatible browser' : 'Running on an unsupported browser');
- })();