@FastSpace а раньше типа было не человекоподобное?
Перекрытие изображений
-
Народ помогите пож. с такой задачей:
Ответ капчи - одна из нескольких картинок, но эти картинки часто закрывают друг друга (частично или полностью). Когда немного, тут еще можно через координаты и размер пересчитать место для клика, но когда одна полность (или почти полность) загораживает другую возникает главная проблема - какая картинка сверху? можно кликать или нет? И при почти полном перекрытии, можно ли кликать по области перекрытия (если нужная картинка сверху).Похоже по частоте таких выцеливаний кромки нужной картинки или обновлению страницы когда картинки 100% наложены - сайт отлавливает ботов, потому что на этой капче я уже словил бан.
Одно уточнение - это не мешанина из мелких картинок на большом холсте, а именно несколько картинок, каждая со своими селекторами (но без URL'ов), и картинки почти постоянно в разной степени, но перекрывают друг друга.
-
@Lokko

вот и весь пример - одна картинка наложилась на другую (наложение произвольное: по горизонтали, вертикали, с угла), а в коде страницы за все ответы капчи (картинки) отвечает блок строк вида<button type="submit" name="captcha" width="..." height="..." class="img" value="..."></button>которые отличаются только атрибутом. Картинки кликабельные и нужную я уже знаю (она бывает как сверху, так и накрыта), но какая из них накрыта, а какая поверх ? вот тут проблема.
Раньше я расчитывал НЕ пересекающиеся области и кликал только по ним или обновлял страницу если перекрытие слишком большое/полное, но по этой фишке сайт меня и спалил. -
@_User_ Nfr
- ну по первых хз как тебя сайт спалил, может быть ты допустил не одну ошибку, а множество
- прочитал пост раз 10, так и не понял суть капчи. Остается догадываться, что скорее всего нужно клацнуть по картинке, которая отвечает вопросу капчи. Если такой картинки нет, то нужно пропустить. Подвох в том, что иногда картинка, что отвечает на вопрос, скрыта и на нее нельзя нажимать, так как ее "не видно". И скорее всего все картинки известны, так как их кол-во сильно ограничено. Допущение, что заранее известны сочетания вопроса и ответа каптчи(набор картинок) звучит странно. Так как сделать "сложную" логику с весьма ограниченным набором изображений не очень логично.
Варианты решений (ресурс не знаю, поэтому чистая фантазия)
- нужно смотреть как картинки перекрывают друг друга. Скорее всего это https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout. Смотри в developer tools css. Не уверен, что ресурс обфусцирует каждый раз при обновлении страницы css стили. Скорее всего можно получить стиль элемента и понять сзади он или спереди.
- если заранее известны нужные картинки, можно делать скриншот части экрана(где выводится ответ каптчи) и сравнивать похожесть с заранее сохраненным набором картинок. Гугления показало, что алгоритмы есть. Что-то вроде вычисления расстояния Левенштейна , только для картинок.
- если заранее НЕ известны нужные картинки и задача выяснить какая находится спереди, а какие не видно. Можно также делать скриншот и сравнивать его с картинками на странице. Кто более похож, тот и спереди.
Если бы такая задача встала у меня, я выбрал бы третий вариант. Так как он не зависит от верстки и конкретно ресурса. То есть более универсален. Да и не сравнивал я еще картинки, и реализация была бы more fun для меня.
Если BAS позволяет загрузить npm модуль с webassembly, то и писать можно много на каком языке, а не только на javascript с его "приколами".Попробуй вручную:
- сохранить картинки
- сделать скриншот элемента с ответами каптчи
- проверить идею сравнения картинок. К примеру, http://phash.org/demo/.
Может быть предварительно нужно провести "нормализацию" картинок. Может быть сделать их черно белыми, может еще что. Обычно используют imagemagick. Или консольную утилиту https://imagemagick.org/script/convert.php. Бывают случаи, что изображения зашумлены и надо подготовить их к процессингу.
-
- Картинка мне заранее известна по ключевому атрибуту (он не меняется).
- Исходных картинок у меня нет (нет URL'ов картинок и их база иногда меняется)(идея со сравнением с исходниками тоже приходила).
- Картинка-ответ есть всегда, но бывает почи полность перекрыта. и тогда кликать по области перекрытия нельзя (нужно выцеливать видимую кромку), а если её выцеливать всегда - на этом спалился.
- Считаю что спалился из-за выцеливания, потому что это произошло примерно через неделю после того как капча стала с рандомным расположением картинок (раньше картинки ответа располагались вряд без перекрытия и бот отработал без изменений около года) поэтому считаю капчу причиной бана. Когда капча сменилась остальное снова пошагово прогнал - задача бота кликать по заранее известным видимым элементам (баннеры). Нет элемента - шаг пропускается. Поэтому иная причина бана почти отпадает (таймауты операций тоже плавающие).
- да, и суть капчи - есть набор картинок (по сути кнопок), ответ написан словом встороне и нужно кликнуть соответствующую картинку-кнопку. В коде каждой картинке соответствует строка вида:
<button type="submit" name="captcha" width="..." height="..." class="img" value="..."></button>На java, HTML и прочем WEB я не пишу (максимум кое что могу понять "со словарем" :) ) иначе давно бы распотрошил код чтобы найти откуда картинки грузятся для сравнения со скриншотом или очерёдность отрисовки элементов (последний сверху), а может там и что попроще с моим вопросом нашлось бы.
а за ссылки спасибо - сейчас посмотю получится ли что из них наковырять.
-
@_User_ Есть кейсы, когда, если юзер спалился, ему подсовываются вообще не те данные. К примеру ты видишь один код, а нормальные посетители другой.
Пример:- если посетитель норм, показываем ему тип каптчи 1
- если НЕ норм, суем тип каптчи 2
И что бы ты не делал, все равно тебя забанят, так как решение было принято еще до выдачи каптчи и не зависит от ее прохождения. Это реальный кейс, не фантазия. Мало того, я даже натыкался, когда невозможно сходу понять, что ты спалился. А выясняется только потом, когда часть функционала ресурса почему то не работает.
Когда-то давно, лет 10 или около того, так Гугл делал при реге мыла. Все регалось, а улетало в бан пачкой спустя какое то время. Так как Гугл еще при реге знал, что это бот и спецом портил тебе бизнес, позволяя зарегать тебе аккаунт, сделать вид, что все в порядке и усложнить тебе жизнь потом. О чем его сотрудники в какой-то статье потом признавались. - ты писал про рандомные таймауты, что ты делаешь все как юзверь, но юзверь делает не как ты. У него другое поведение. Есть антибот защиты, что анализируют поведение реальных пользователей и если что-то не совпадает, то подозрение на бота, Так 100% делает https://datadome.co/ и скорее всего не только он. Просто про него известно.
Есть вариант попробовать зарегать ручками пачку акков, но делать по логике, как у тебя в скрипте, Если ты там клацаешь по "диагонали", то и клацай так же ручками. Если юзаешь какие то специфичные прокси, то используй их же. Для чистоты эксперимента юзай
Fingerprint Manager. Так как под капотом он использует все тот же worker, что и BAS. Так же, так как ты регаешь ботов (если вообще есть такое понятие как рега, а не простое прохождение каптчи для попадания куда-то внутрь без реги), не просто так, то не делай ничего потом, что делаешь обычно. Так как стоит задача проверить именно регу, а не дальнейшее поведение.
Я понимаю твой опасения, что спалился из-за выцеливания, и тем не менее есть пути проще на стороне овнера ресурса. Тем более у тебя есть вариант поснифать запросы, что сайт шлет и если ну НИКАКИМ образом не шлет координаты мыши на сервер, то он скорее всего и не палит где ты там клацнул.
Проверь с помощьюCanvasInspectorвдруг ресурс еще и канвас собирает. Если собирает, то в описании кCanvasInspectorвсе написано, как действовать.
https://wiki.bablosoft.com/doku.php?id=perfectcanvas -
- Про кейсы слышал где то краем уха, но не думаю, что мелкий букс на такое замахнётся.
- Я пока не использую мульты. Бот работает с зареганным и настроенным вручную аккаунтом. Так что заморачиваться с отпечатками и прокси смысла нет.
- При кликах по капче, координат он не шлёт (мучил снифером при обновлениях - админ непоседливый, приходится держать сайт на контроле :) ), а вот скрипт который контролит капча-клики и периодически сливает подозрения вполне может сидеть. Потому что из-за подобного скрипта мне этот сайт пришлось в БАС переносить из МиниПостера, который работает только на запросах. Когда добавили этот скрипт - страница начала при активности постоянно слать "POST" запросы. МиниПостер такую хрень сделать не мог. Активность есть, а запросов с чётким интервалом нет - я словил бан.
- Бот само собой не действует как человек, но я стараюсь писать их максимольно приближёнными к моей манере работы (хотя это обходится кучей "воды" в коде). Понаблюдав за работой некоторых ботов я например полностью отказался от экшена "ждать полной загрузки" заменив его на цикл с опросом наличия ключевых для след. действия элементов. Громоздко - да но более похоже на меня. Таймауты организовал аналогично своим и т.п.
- И я вроде нашел зацепку по своему вопросу. Надо только пробный код накидать и потестить. (пару дней, чтобы резкой активностью на капче лишних подозрений не вызвать, а то уже кошельки для новых акков закончились :) )