Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Vint

Pages: 1 ... 4 5 [6] 7 8 ... 263
76
Вот это непонятно. Зачем закрашивать-сохранять-обновлять ?
Это если в области возможны любые цвета. Мы просто на первом шаге перебираем все цвета и ждём пока нам не попадётся такой, которого нет.
На втором шаге делаем заготовку картинки этого цвета и на третьем ищем её.
Но скорее всего это не нужно и достаточно выбрать один кислотный цвет для этих целей.

77
Можно еще так:
Если без заморочек - берем по порядку все цвета из массива и pixelreplace-ам меняем их в нашей области на какой-нибудь уникальный цвет, которого точно нет изначально. Ищем квадрад этого уникального цвета picturein-ом. Готово.
С заморочками - в начале ищем цвет, которого точно нет в нашей искомой области. Просто циклом for , по очереди, пока не найдет ifpixelin. Когда нашли, нужно сохранить искомый квадрат этого цвета - закрашиваеем любую облать этим цветом и сохраняем. Обновляем графический буфер. И дальше уже перекрашиваем все цвета из массива этим нашим цветом, тот что нашли в начале. Ищем сохраненный квадрат. Готово.
Вроде это все шустро должно работать.

Отличное решение! А я всё время забываю про pixelreplace. Всё городульки горожу  ;D
Второй вариант, не понял. Зачем искать цвет, которого точно нет? Как его можно найти?

HD1521 забудь про то, что я написал выше.

78
Это не велосипед, готовых решений нет, нужно писать.

Насколько большой массив с кодами цветов?
На ум сразу пришли 3 способа поиска, но скорость проверки может быть плохая, всё зависит от количества допустимых цветов. И можно ли сократить их количество применив COLORMODE?

Можно реализовать все 3 способа и сравнить скорость выполнения. Можно хоть один тестовый образец для опытов?
Область на краях как учитывается? Фактически нужно проверять 98х98 (при 3х3) или 96х96 (при 5х5) или проверять все не учитывая выходящие области?

1. Тривиальный, Поиск всех цветов через SCANPXL. Пробегаемся по нему в каждой точке проверяя точки +1, +2 по xy каждый цвет проверяя в массиве. При первом же несовпадении бросаем всё и переходим к следующей точке.
2. В начале то же самое SCANPXL, но потом пробегаемся по массиву разрешённых цветов и считаем их в области 3х3, если получили 9 - точка найдена. Думаю этот способ должен работать быстрее, т.к. поиск по массиву из п.1 в кликере не быстрый.
3. Если именно проверки в массиве будут самым медленным куском из-за большого количества цветов, можно вместо поиска по массиву склеить всё в строку через разделитель и искать методами строк. Это даст больший выигрыш.

79
Ошибки / Re: Странная работа функции PXLXOR
« on: December 15, 2022, 02:39:33 PM »
Доброго вечера.
Столкнулся со следующей проблемой.
При подсчете контрольной суммы пикселей в заданной области (327, 490, 334, 501) возвращается значение  0 если область меньше чем 12х12.
Code: (clickermann) [Select]
LOGCLEAR
GETSCREEN
$PXLXOR = PXLXOR(327, 490, 334, 501) //контрольная сумма пикселей в области 7х11
LOGWRITE ("$PXLXOR (7х11) = ",$PXLXOR)

$PXLXOR = PXLXOR(327, 490, 339, 502) //контрольная сумма пикселей в области 12х12
LOGWRITE ("$PXLXOR (12х12) = ",$PXLXOR)
 halt


Лог
21:53:35 $PXLXOR (7х11) = 0
21:53:35 $PXLXOR (12х12) = 16579836

В чём здесь проблема?

Никакой проблемы нет, так и должно работать.
В справке к функции есть уточнение:
Quote
Такой способ не очень надежен в плане получения уникального хеша для простых изображений, но весьма быстр.
Используй PXLCRC и будет тебе счастье.

Чтобы понять почему так получилось, как работает XOR посмотри таблицу истинности для XOR.
Например у тебя есть число в двоичном виде 01010101. Второй операнд 00001111. Ты биты установленные во втором числе (1) ты переключаешь в первом числе биты на противоположные, но только те, которые установлены во втором числе (1)
01010101
00001111
-------------
01011010

Если результат опять сделать XOR с тем же числом, то опять получим первое число

01011010
00001111
-------------
01010101

Короче, очень ненадёжный способ на некоторых комбинациях, как и написано, проблема с уникальностью.
А ты используешь на изображении с применением COLORMODE(7), чем усугубил ситуацию. Там цвета такие.

твой зелёный цвет: 8388479
01111111 11111111 01111111

цвет фона: 8355711
01111111 01111111 01111111

Как говорится найди два одно отличие
              0 XOR 01111111 = 01111111
01111111 XOR 01111111 = 00000000

Этот зелёный цвет отличается от фона на 1 бит. Если зелёный встретится в изображении чётное число раз, G канал превратится в 0 и не влияет на остальной подсчёт. С фоном тоже самое. Если и тот и тот чётное - итог 0.

(327, 490, 334, 501) // область 8х12 (не 7х11)  8*12 = 96 - чётное количество пикселов всего и так получилось фон и зелёный тоже оба чётные.
(327, 490, 339, 502) // область 13х13 (не 12х12)  13*13 = 169 операций - нечётное количество всего, какой-то из 2-х (фон или зелёный) обязательно будут нечётными.

Используй PXLCRC и не мучайся.
PXLXOR - если уж очень нужна выгода в миллисекунды и при этом много цветов и большая область. Чем выше применяемый COLORMOD, тем хуже результат, т.к. колормод просто забивает биты справа единицами.


80
Архив / Re: IF_PICTURE_IN
« on: December 14, 2022, 05:15:15 PM »
просто в справке не в 100% пунктах синтаксисов есть хотябы 1 пример для каждого пункта всей справки)
А зачем общие принципы формирования справки копировать в каждом пункте?


81
Общие вопросы / Re: IF_PICTURE_IN - Для новичков
« on: November 28, 2022, 03:05:56 PM »
Как уживается это

2. после нажатия на кнопку запуска в каждом из окон, через N промежуток времени выскакивает картинка
(N - промежуток разный может и 500мс а может и 3-10 секунд).

с этим?
оставлен один проход поиска

И только если не находит - поиск картинки выключается, остановил цикл поиска и вернутся к кнопкам запуска.

Зачем вообще прерывать цикл? Тем более при первом же не появлении (а это штатная ситуация из п. 2 и 4).
Пусть крутится по кругу спокойно.

P.S. COLORMODE(0) - бессмысленная команда.

82
Фингипринты можно обойти, если использовать FF c контейнерами и CanvasBlocker
И при этом не пройти капчу.

83
Общие вопросы / Re: Подбор пароля по маске
« on: November 21, 2022, 10:09:16 AM »
Ты не знаешь как написать цикл?

Если там только строчные буквы, то в худшем случае будет перебор 456976 вариантов. Сколько там занимает проверка "определённого условия"... если 1 секунду, то уйдёт от 0 до 127 часов.

84
Это защита от кликера?
Нет. Сайт не может отслеживать кликер это жмёт или не кликер, у него нет таких возможностей. Сайт может только анализировать поведение, это не тот случай.

P.S. И перестань думать, что на нормальных ресурсах нет противодействия стратегии Мартингейла.

85
Биржа труда / Re:скрипты для
« on: November 20, 2022, 09:17:14 PM »
Но сразу видно, что автору темы не приходилось на себе многократно прочувствовать неприятное житейское правило "оказанная услуга - ничего не стоит"
 И он ни разу еще не получал, подряд нескольких предложений, с как под копирку написанным утверждением заказчиков;
"у меня простенький заказ, вам на 5 минут работы."   :o

 ;D

86
В 2016 году человек здесь уже спрашивал про аналогичную капчу. Это была капча geetest
Один из вариантов, как она выглядела тогда:


Сейчас можно её пощупать здесь.
Выглядит она так:

В то время чуть побаловались с ними и всё. Начало определять не нужно, оно всегда на одной линии. Координату X - центр пустого места тоже кое как определяли на части капч.
Скрипт работал, решал на демо страницах. На реальных тоже решал... но всего несколько раз.
Опытным путём стало понятно, что пишутся и анализируются параметры кликов/движения при решении капчи и возможно, перед решением. Т.е. сделав пару раз примерно одинаково на следующий не пропускает. Это проявляется даже если решать руками! Я так понял на демо странице капчи этот анализ был отключён, чтоб не собирали статистику для обхода.
Сейчас же на их сайте явно указано https://www.geetest.com/en/Why_us
  • Detect Bot Features. Когда посетитель нажимает кнопку CAPTCHA, CAPTCHA автоматически собирает и анализирует более 100 параметров, включая данные о сетевом окружении, атрибуты устройства, биометрические данные и т. д.
  • На основе тестов обнаружения ботов, выполненных на основе этих данных, модуль безопасности GeeTest оценивает уровень риска посетителя. Если функция бота была обнаружена, дополнительные данные будут собраны с помощью ответа на вызов для проверки личности.
  • По мере того как в 320 000 защищенных доменов GeeTest выявляются новые шаблоны вредоносных атак, модели машинного обучения, лежащие в основе механизма анализа рисков GeeTest, развиваются, чтобы точно определять и блокировать все направления атаки в режиме реального времени.

Вот и борись теперь с ними прямыми методами.

Были ещё подобные капчи, где движение паззла нелинейное с мышью, там же был и разный диапазон ползунка, но это удавалось решить. А вот против фингерпринта что ты можешь предложить вместе с нейросетями, это большой вопрос. И BAS здесь ничем не отличается.

Можешь заняться этим ответственным делом. Но стоит ещё понимать, что недостаточно сделать раз и забыть, придётся постоянно поддерживать изменения в капчах. Гонка вооружений своеобразная.

87
Во первых, здесь не 2, а 3 потока. Код в корне, это основной поток, он тоже крутится по кругу. А он состоит из бесконечного присваивания значений переменных.
В нём или должна быть задержка или т.к. он не имеет смысла и только вреден, поток found убрать пусть код будет в основной части кода. Всё равно там бесконечный цикл.

Во вторых, тот бесконечный цикл в found, если картинки нет, он без задержек будет по кругу гонять GETSCREEN-COLORMODE-IF_PICTURE_IN при этом ядро проца загрузится полностью.
Нужно добавить ELSE с задержкой или задержку в конце цикла WHILE

P.S. и не нужно начиловать интерпритатор и задавать имена совпадающие с встроенными функциями. Имя потока 'move' лучше поменять.

Code: (clickermann) [Select]
$rnd1_x = 960
$rnd1_y = 441
$rnd2_x = 1043
$rnd2_y = 447
$rnd3_x = 1071
$rnd3_y = 501
$rnd4_x = 1026
$rnd4_y = 546
$rnd5_x = 961
$rnd5_y = 573
$rnd6_x = 886
$rnd6_y = 563
$rnd7_x = 864
$rnd7_y = 510
$rnd8_x = 959
$rnd8_y = 543

$rnd = RNDFROM($rnd1,$rnd2,$rnd3,$rnd4,$rnd5,$rnd6,$rnd7,$rnd8)
//$rnd_x = RNDFROM(829,1085,957,1030,900,1007,906,1092,1076)
//$rnd_y = RNDFROM(533,424,503,566,411,610)
$rnd_wait = RND(2000,5000)


IF($first = 0)
    $first = 1
    $g = HGET(868, 296)
    HSETTEXT($g, "MU_QUEST")
   
    $quest = INPUTBOX("Какого монстра ищем?", ".bmp", 500)
    LOGWRITE($quest)
   
    $exit = DIALOGBOX("Закрыть окно по завершению квеста?", 4)
   
    IF ($exit = 6)
        print("Да")
        $close = 1
    ELSE
        print("Нет")
        $close = 0
    END_IF
   
    WAITMS(300)
    WNDBUMP($g)
    SETTHREAD(move_rnd, 1)
END_IF

$check = 0
WHILE($check = 0)
    GETSCREEN(547,270, 1354,791)
    COLORMODE(8)
    IF_PICTURE_IN(547,270, 1354,791, $quest, -1, 99)
        SETTHREAD(move, 0)
        LUP($_xmouse, $_ymouse)
        WAITMS(200)
        //  $check = 1
        MOVE($_return1+30, $_return2+100)
        WAITMS(500)
        LDOWN($_return1+30, $_return2+100)
        WAITMS(500)
        LUP($_return1+30, $_return2+100)
        WAIT(1)
        KEYPRESS(#F6)
        WAIT(3)
       
        KEYPRESS(#F8)
        WAITMS(500)
       
        GETSCREEN(548,646, 876,780)
        COLORMODE(7)
        IF_PICTURE_IN (548,646, 876,780, "quest_done.bmp", -1, 90)
            IF($close = 1 )
                WAITMS(1000)
                MOVE(1337,236)
                WAITMS(300)
                LCLICK(1337,236)
                LOGWRITE("Окно закрыто")
                EXECUTE("CMH.exe", "TMessage Квест успешно выполнен! Окно закрыто")
                WAIT(1)
                HALT
            ELSE
                EXECUTE("CMH.exe", "TMessage Квест успешно выполнен! Окно на месте ")
                HALT
            END_IF
        ELSE
            WAITMS(1000)
            SETTHREAD(move_rnd, 1)
        END_IF
    ELSE
        WAITMS(100)
    END_IF
END_CYC


THREAD(move_rnd, 0)
    WAITMS(100)
    //MOVE($rnd_x, $rnd_y)
    MOVE(RNDFROM($rnd1_x,$rnd2_x,$rnd3_x,$rnd4_x,$rnd5_x,$rnd6_x,$rnd7_x,$rnd8_x), RNDFROM($rnd1_y,$rnd2_y,$rnd3_y,$rnd4_y,$rnd5_y,$rnd6_y,$rnd7_y,$rnd8_y))
    WAITMS(500)
    LDOWN($_xmouse, $_ymouse)
    WAITMS($rnd_wait)
    LUP($_xmouse, $_ymouse)
    WAIT(1)
END_THREAD

88
Code: (clickermann) [Select]
GETSCREEN
SCANPICTURE($scan, 0,0, 3180,$_ymax, "BBB.bmp", -1, 80)

$scan_size = ARRSIZE($scan)
FOR($i=0, $i < $scan_size, 2)
    $bbbX = $scan[$i]
    $bbbY = $scan[$i+1]

    IF_PICTURE_IN($bbbX-2000,$bbbY-3, $bbbX-1900,$bbbY+15, "GGG.bmp", -1,100)
    ELSE
        LCLICK($bbbX+3, $bbbY+3)
        WAITMS(50)
    END_IF
   
END_CYC
UNDEFINE($scan)

HALT

Тщательно настроить поиск GGG. Должно, если есть, всегда находить при заданном колормоде и проценте.

Задача: Необходимо сделать очень быстро LCLICK

Чтобы было быстрее, нужно точней задать область поиска для BBB и GGG. Вторым, по X, можно относительные, как в примере, можно абсолютные.

p/s после того, как все нужные BBB "прокликаны", в ручную делается перезагрузка страницы, и таблица меняется и снова нужно прокликать по BBB и т.д.
Без понятия, зачем здесь вручную перезагрузка страницы, но если так нужно, то непонятно что делать коду, ну в ручную и вручную.

89
"Тут же всё неудобно!"©
Вон зумерам беседу подавай, там уютно и понятно, одна извилина - одна ветвь постов. Красота.
Утром спросил, вечером забыл, на завтра забил и полетел в другую беседу.

90
Общие вопросы / Re: IF_PICTURE_IN - Для новичков
« on: October 10, 2022, 10:42:14 AM »
И вот смотрите, что происходит: экран коррекнтый, в памяти всё корректно, контрольный скрин с того места где искали совпадает с шаблонным изображением. А НЕ НАХОДИТ!
Что не так-то?
Как уже сказали, картинки слишком разные для поиска в лоб без цветокоррекции и одни проценты здесь не помогут.
Вот "муравьями" показаны одинаковые области

Их даже не половина. Может процентов 25-30.

P.S. https://youtu.be/7YsBHzR87Yc

Pages: 1 ... 4 5 [6] 7 8 ... 263