2ch-CAPTCHA-MATH

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

作者
STELLAR STELS
今日安裝
0
安裝總數
1
評價
0 0 0
版本
0.2
建立日期
2025-07-29
更新日期
2025-07-29
尺寸
8.5 KB
授權條款
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.СЛАВА УКРАИНА