если у кого-то есть идеи, как сохранять в файл с основным логом, так что бы он не ломал его работу - буду рад выслушать)
[CaptchaImageClick] - модуль для решения капчи кликами по изображениям через сервис cap.guru
-
@FastSpace said in [CaptchaImageClick] - модуль для решения капчи кликами по изображениям через сервис cap.guru:
После разработки на Go возникает ощущение, будто вместо нормального продукта я купил «макароны по красной цене» из ближайшей пятерочки.
🤝 ❤ 😁
1Да просто бас задумывался как простой конструктор ботов ) Поэтому живи с этим 😅
-
Здравствуйте.
При решении hCaptcha модуль получает решение от сервиса capguru, но использует неправильные координаты. Ту часть изображения, которую нужно передвинуть в правильное место, он перетаскивает далеко за пределы экрана. Возможно, я что-то делаю не так, или это баг модуля? -
@cryptovan said in [CaptchaImageClick] - модуль для решения капчи кликами по изображениям через сервис cap.guru:
Здравствуйте.
При решении hCaptcha модуль получает решение от сервиса capguru, но использует неправильные координаты. Ту часть изображения, которую нужно передвинуть в правильное место, он перетаскивает далеко за пределы экрана. Возможно, я что-то делаю не так, или это баг модуля?Напишите в саппорт, приложите отладочный лог, ваши настройки.
-
Новая версия 7.83
-
Добавлен новый режим Real для настроек скорости мыши. Модуль используя метод BAS _get_browser_screen_settings определит тип дисплея (8K, 4K, 2K, Full HD и т.д.), затем рассчитает оптимальное значение DPI мыши и сгенерирует соответствующие параметры скорости. Каждому типу монитора доступен набор из 6-9 пресетов DPI, модуль выберет один случайно. Всего вариантов пресетов более 80.
-
По умолчанию в BAS DPI мыши равен примерно 800-1000, что не подходит для всех случаев. Новый режим имитирует реальное поведение: на 27 дюйме мониторе 4K мышь будет двигаться значительно быстрее (как игровая мышь с высоким DPI), чем на 13 дюймов ноутбуке (как офисная мышь с низким DPI). Это воспроизводит естественное поведение человека, использующего различные устройства.
-
Зачем это нужно? Эта опция улучшает проходимость капч, которые анализируют поведение мыши. Проверено на сайте с GeeTest v4 icon hand капчей: дефолтные настройки мыши BAS не проходили валидацию (JS сайта отклонял ответ) даже если выбрать 3 похожих изображения правильно, с новой опцией число ошибочных решений минимально. Также улучшает проходимость токенов для Enterprise типов капч (hCaptcha Enterprise, ReCaptcha Enterprise). И небольшой бонус, улучшено скорость решения каптч, поскольку движения мыши теперь могут быть быстрее оригинала даже на небольших мониторах.
-
hCaptcha: Никаких изменений нет. Проверены все типы каптч (3x3, канвас с перетягиванием и канвас клики). Все работает удовлетворительно (на 3+). Хотя перед новым годом в 25 числах запускал модуль и ловил тонну багов. Видимо изменения откатили и хорошо :)
P.S ситуацию с мышкой я хоть и улучшил, но используемая библиотека в BAS для мыши - полное говно. В идеале надо ее полностью поменять, а не использовать костыль.
-
-
Новая версия 7.84
- Обновлением 7.83 были сломаны мобильные отпечатки - починил.
- Немного снизил скорость мыши на некоторых видах мониторов, могло встретиться бредовое высокое значение.
- Для geetest v4 slider снижено минимальное требование к картинке капчи с 10000 байт до 6000 байт. На мобильных отпечатках грузиться картинка меньше чем 10000 байт.
-
Почему-то не решает капчу на сайте grailed.com
Зависает на этапе --> Нашли открытое окно ReCaptcha 2 c изображениями и заданием. Текущая позиция (номер фрейма) на странице: 1 -
@lucinemajor said in [CaptchaImageClick] - модуль для решения капчи кликами по изображениям через сервис cap.guru:
Почему-то не решает капчу на сайте grailed.com
Зависает на этапе --> Нашли открытое окно ReCaptcha 2 c изображениями и заданием. Текущая позиция (номер фрейма) на странице: 1Все работает если прочитать документацию, на сайте невидимая капча, селектор выбрать надо от нее.
-
@FastSpace Javascript ES3 Decrypt / v edata response from Captcha Tiktok write by Gemini:
function stringToUtf8Array(str) { var utf8 = []; for (var i = 0; i < str.length; i++) { var charcode = str.charCodeAt(i); if (charcode < 0x80) utf8.push(charcode); else if (charcode < 0x800) { utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f)); } else if (charcode < 0xd800 || charcode >= 0xe000) { utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f)); } else { i++; charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff)); utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f)); } } return utf8; } function utf8ArrayToString(array) { var out = ""; var i = 0; var len = array.length; var c, char2, char3; while (i < len) { c = array[i++]; switch (c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: out += String.fromCharCode(c); break; case 12: case 13: char2 = array[i++]; out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); break; case 14: char2 = array[i++]; char3 = array[i++]; out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); break; default: // Simple fallback for complex chars or errors out += String.fromCharCode(0xFFFD); // Replacement char } } return out; } var B64_STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; function base64Encode(byteArray) { var output = ""; var i = 0; var len = byteArray.length; while (i < len) { var chr1 = byteArray[i++]; var chr2 = byteArray[i++]; var chr3 = byteArray[i++]; var enc1 = chr1 >> 2; var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); var enc4 = chr3 & 63; if (isNaN(chr2)) enc3 = enc4 = 64; else if (isNaN(chr3)) enc4 = 64; output = output + B64_STR.charAt(enc1) + B64_STR.charAt(enc2) + B64_STR.charAt(enc3) + B64_STR.charAt(enc4); } return output; } function base64Decode(input) { var output = []; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); while (i < input.length) { enc1 = B64_STR.indexOf(input.charAt(i++)); enc2 = B64_STR.indexOf(input.charAt(i++)); enc3 = B64_STR.indexOf(input.charAt(i++)); enc4 = B64_STR.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output.push(chr1); if (enc3 != 64) output.push(chr2); if (enc4 != 64) output.push(chr3); } return output; } function getRandomBytes(len) { var arr = []; for (var i = 0; i < len; i++) { arr.push(Math.floor(Math.random() * 256)); } return arr; } var Cha = function (key, nonce, counter) { if (key.length !== 32 || nonce.length !== 12) { throw new Error("Invalid key or nonce length"); } this.k = key; this.n = nonce; this.c = counter || 0; }; Cha._r = function (v, n) { return ((v << n) | (v >>> (32 - n))) >>> 0; }; Cha._qr = function (s, a, b, c, d) { s[a] = (s[a] + s[b]) >>> 0; s[d] ^= s[a]; s[d] = Cha._r(s[d], 16); s[c] = (s[c] + s[d]) >>> 0; s[b] ^= s[c]; s[b] = Cha._r(s[b], 12); s[a] = (s[a] + s[b]) >>> 0; s[d] ^= s[a]; s[d] = Cha._r(s[d], 8); s[c] = (s[c] + s[d]) >>> 0; s[b] ^= s[c]; s[b] = Cha._r(s[b], 7); }; Cha.prototype._bytesToInt = function (arr, offset) { return (arr[offset] | (arr[offset + 1] << 8) | (arr[offset + 2] << 16) | (arr[offset + 3] << 24)) >>> 0; }; Cha.prototype._intToBytesPush = function (val, targetArray) { targetArray.push(val & 0xff); targetArray.push((val >>> 8) & 0xff); targetArray.push((val >>> 16) & 0xff); targetArray.push((val >>> 24) & 0xff); }; Cha.prototype._block = function (ctr) { var s = [0x61707865, 0x3320646e, 0x79622d32, 0x6b206574]; for (var i = 0; i < 8; i++) s.push(this._bytesToInt(this.k, i * 4)); s.push(ctr >>> 0); for (var i = 0; i < 3; i++) s.push(this._bytesToInt(this.n, i * 4)); var w = s.slice(0); for (var i = 0; i < 10; i++) { Cha._qr(w, 0, 4, 8, 12); Cha._qr(w, 1, 5, 9, 13); Cha._qr(w, 2, 6, 10, 14); Cha._qr(w, 3, 7, 11, 15); Cha._qr(w, 0, 5, 10, 15); Cha._qr(w, 1, 6, 11, 12); Cha._qr(w, 2, 7, 8, 13); Cha._qr(w, 3, 4, 9, 14); } var blockBytes = []; for (var i = 0; i < 16; i++) { this._intToBytesPush((w[i] + s[i]) >>> 0, blockBytes); } return blockBytes; }; Cha.prototype._p = function (data) { var result = []; var dataLen = data.length; var currentCtr = this.c; var dataIdx = 0; while (dataIdx < dataLen) { var block = this._block(currentCtr); currentCtr = (currentCtr + 1) >>> 0; for (var i = 0; i < block.length; i++) { if (dataIdx >= dataLen) break; result.push(data[dataIdx] ^ block[i]); dataIdx++; } } this.c = currentCtr; return result; }; var edata = { FLAG: [0x01], // b'\x01' encrypt: function (txt) { var d = stringToUtf8Array(txt); var k = getRandomBytes(32); var n = getRandomBytes(12); var c = new Cha(k, n, 0); var ct = c._p(d); var raw = this.FLAG.concat(k, n, ct); return base64Encode(raw); }, decrypt: function (txt) { var raw = base64Decode(txt); if (raw.length < 45) { throw new Error("Invalid edata"); } var k = raw.slice(1, 33); var n = raw.slice(33, 45); var ct = raw.slice(45); var c = new Cha(k, n, 0); var plain = c._p(ct); return utf8ArrayToString(plain); } }; // Decrypt var cipherText = "Ae8Tm93oj9vmIbi/Z22dYrzR1ji3hm+63dxGUMydXhF4...." var decryptedText = edata.decrypt(cipherText); log(decryptedText) // Encrypt var originalText = "...." var cipherText = edata.encrypt(originalText); log(cipherText) -
Здравствуйте, подскажите пожалуйста ваш модуль может пройти эту капчу ? https://community.bablosoft.com/topic/32020/капча-от-яндекса-как-пройти
-
@xregem said in [CaptchaImageClick] - модуль для решения капчи кликами по изображениям через сервис cap.guru:
Здравствуйте, подскажите пожалуйста ваш модуль может пройти эту капчу ? https://community.bablosoft.com/topic/32020/капча-от-яндекса-как-пройти
Версия от 7.88