CAPTCHA-MATH

Автоматическое решение математической CAPTCHA

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

You will need to install an extension such as Tampermonkey to install this script.

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
作者
STELLAR STELS
1日のインストール数
2
累計インストール数
17
評価
0 0 0
バージョン
0.2
作成日
2025/07/29
更新日
2026/03/18
大きさ
9.11KB
ライセンス
MIT
対象サイト
すべてのサイト

Основные изменения и исправления:
Надежный парсинг уравнения (solveEquation):

Исходное разделение по split(/([\+\-\*\/=])/) могло быть неточным, если вокруг операторов были пробелы, или если уравнение было неполным.

Новое регулярное выражение equation.match(/\s*(\d+|\?)\s*([-+*/\\])\s*(\d+|\?)\s*=\s*(\d+|\?)\s*/) более точно извлекает операнды, оператор и результат, учитывая пробелы.

Используется parseFloat вместо parseInt для операндов и результата, чтобы корректно обрабатывать потенциальные десятичные числа (хотя CAPTCHA на 2ch обычно целые, это делает функцию более универсальной).

Добавлена обработка деления на ноль (operand2 !== 0 или result !== 0), возвращая null в таких случаях.

Улучшена логика для оператора деления, когда 2ch может использовать как / так и \. Теперь \ преобразуется в /.

Улучшенная логика обработчика ввода (handleCaptchaInput):

Используется более строгое регулярное выражение captchaPattern = /^\s*(\d+|\?)\s*[-+*/\\]\s*(\d+|\?)\s*=\s*(\d+|\?)\s*$/ для проверки того, что введенный текст точно соответствует формату уравнения CAPTCHA. Это предотвратит попытки решить произвольный текст, который пользователь может ввести.

Проверка solution !== null && !isNaN(solution) гарантирует, что решение найдено и является корректным числом.

Округление результата: inputElement.value = Math.round(solution); - CAPTCHA на 2ch всегда требует целые числа.

Имитация событий change и input: inputElement.dispatchEvent(new Event('change', { bubbles: true })); и inputElement.dispatchEvent(new Event('input', { bubbles: true }));. Это очень важно, так как многие веб-приложения (включая 2ch) реагируют на эти события для валидации и отправки данных. Простое изменение value элемента DOM не всегда запускает необходимые внутренние реакции фреймворков.

Динамическое обнаружение CAPTCHA (MutationObserver):

Изначальный код использовал document.querySelectorAll только при загрузке скрипта. Однако CAPTCHA на 2ch может появляться динамически (например, при отправке поста или создании треда).

Добавлен MutationObserver, который наблюдает за изменениями в DOM. Когда новые узлы добавляются (например, появляется форма с CAPTCHA), он автоматически находит их и прикрепляет обработчик.

Для предотвращения многократного добавления обработчиков к одному и тому же элементу, используется атрибут dataset.captchaMathProcessed.

Улучшенный логгер (logger):

Добавлены функции warn и error для более информативных сообщений в консоли, что удобно для отладки.

Инициализация скрипта :

Добавлена проверка document.readyState и использование DOMContentLoaded для запуска инициализации. Это гарантирует, что скрипт будет ждать полной загрузки DOM, прежде чем пытаться взаимодействовать с элементами.

Скрипт теперь запускает initialize как при загрузке DOM, так и для уже существующих элементов CAPTCHA, а затем использует MutationObserver для будущих.

Метаданные UserScript :

Версия обновлена до 0.2.

Добавлен @grant none, так как скрипт не использует специальных привилегий Tampermonkey/Greasemonkey.

Этот исправленный скрипт должен быть значительно более надежным и эффективным в решении CAPTCHA на 2ch, независимо от того, как и когда она появляется на странице.Я добавил лицензию MIT в метаданные UserScript для скрипта 2ch-CAPTCHA-MATH.СЛАВА УКРАИНА
-----------------------------------------------------
Что делает этот скрипт (разбор)

По коду:

Отслеживает появление CAPTCHA-поля
Через MutationObserver скрипт ищет элементы с классом .captcha__val.input (динамически добавляемые в DOM).

Вешает обработчик input
Когда пользователь вводит текст, вызывается handleCaptchaInput.

Проверяет, похоже ли введённое на уравнение
Регулярное выражение ищет формат вида:

число или ? оператор число или ? = число или ?

Например:

2 + ? = 5

? * 3 = 6

4 / 2 = ?

Решает уравнение
Функция solveEquation():

Парсит операнды и оператор (+ - * / \)

Вычисляет неизвестное значение

Возвращает результат

Автоматически подставляет ответ
Если решение найдено:

округляет число

подставляет в поле

триггерит события change и input

Возможные проблемы в коде (общий разбор логики)

Без помощи в обходе CAPTCHA, могу отметить общие инженерные моменты:

Деление на ноль частично проверяется, но не во всех сценариях.

Math.round() может давать неправильный ответ, если CAPTCHA ожидает точное значение.

Регулярное выражение не учитывает отрицательные числа.

Используется parseFloat, хотя CAPTCHA, вероятно, только целочисленная.

MutationObserver может создавать лишнюю нагрузку при частых изменениях DOM.