Хочу побороть элементарную капчу
Суть капчи такова
Всего в капче 8 рисунков. Когда она выскакивает появляется окошко разделённое чертой. Сверху 2-а случайных рисунка из 8-и. А ниже все 8-ем из которых нужно выбрать 2-а что были выше.
Как сделать чтобы скрипт искал картинки сверух вниз и слева направо (хотя вроде по умолчанию как раз так) И если встретил похожие то кликал по ним. То есть когда он встречал бы знакомый рисунок впервые, он бы на него не реагировал, а реагировал только если он его встретил во второй или в третий раз.
Я пробовал крутить с этим скриптом, но где то я что то упускаю.
set #startX 0
set #startY 0
set #endX 1200
set #endY 720
set $path "c:\ima\"
set %image [1] c1
set %image [2] c2
set %image [3] c3
set %image [4] c4
set %image [5] c5
set %image [6] c6
set %image [7] c7
set %image [8] c8
set #size size(%image) // всего картинок (Тут я так и не понял куда надо вставлять количество картинок. У меня их восемь)
hint #size
:metka
for #i 1 #size 1 // цикл для поиска картинок
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2)
if #a > 0
kleft %arr[1 1] %arr[1 2]
wait 1000
end_if
end_for
wait 2000
goto metka
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2 80 -1) // -1 это искать все картинки
if size(%arr) > 1 // если найдено больше 1 картинки
for #j 1 size(%arr) // цикл для всех найденных картинок
move %arr[#j 1] %arr[#j 2] // навести курсор
wait 500
end_for
end_if
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2 80 -1) // -1 это искать все картинки
if size(%arr) > 1 // если найдено больше 1 картинки
for #j 1 size(%arr) // цикл для всех найденных картинок
move %arr[#j 1] %arr[#j 2] // навести курсор
wait 500
end_for
end_if
set #startX 0
set #startY 0
set #endX 1200
set #endY 720
set $path "c:\ima\"
init_arr %image c1 c2 c3 c4 c5 c6 c7 c8
set #size size(%image)
for #i 1 #size 1 // цикл для поиска картинок
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2 100 -1 10) // подобрать deviation если не находит картинки
if size(%arr) > 1 // если найдено больше 1 картинки
for #j 1 size(%arr) // цикл для всех найденных картинок
move %arr[#j 1] %arr[#j 2] // навести курсор
wait 500
end_for
end_if
end_for
end_script
Спасибо огромное. Работает. Только не всегда ищет сверху вниз и слева на право и выходит так что пара раз может нажать первее второй рисунок, но и так скрипт выполняет своё назначение.
Ищутся коричневые квадраты - клик по верхнему, потом по нижнему.
Ищутся серые квадраты - клик по верхнему, потом по нижнему.
Если надо кликать как вы хотите, я уже писал - сортируйте массив. Алгоритм другой при этом:
Ищутся все картинки (при этом никуда не кликает), координаты записываются в массив, массив сортируется по координате X. Потом уже клики.
set #startX 0
set #startY 0
set #endX 1200
set #endY 720
set $path "c:\ima\"
init_arr %image c1 c2 c3 c4 c5 c6 c7 c8
set #size size(%image)
set #z 1
for #i 1 #size 1 // цикл для поиска картинок
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2 100 -1 10)
if size(%arr) > 1 // если найдено больше 1 картинки
init_arr %arr2 (#z) %arr [1 1] %arr [1 2] %arr [2 1] %arr [2 2] // запись координат в массив
set #z #z + 1
end_if
end_for
sort_array %arr2 1 // сортировка по координате X
for #j 1 size(%arr2)
move %arr2[#j 1] %arr2[#j 2] // навести курсор на левую картинку
wait 500
move %arr2[#j 3] %arr2[#j 4] // навести курсор на аналог картинки
wait 500
end_for
end_script
А можно сделать чтобы только после клика по серым квадратам находились координаты коричневого. Часто после первого клика чувствительно смешаются координаты 2ого объекта и его ранее сохранённые координаты могут быть уже неверны.
set #startX 0
set #startY 0
set #endX 1200
set #endY 720
set $path "c:\ima\"
init_arr %image c1 c2 c3 c4 c5 c6 c7 c8
set #size size(%image)
set findoffsetx 13 // смещение для координаты X
set findoffsety 11 // смещение для координаты Y
repeat 2 // повторить 2 раза
set #z 1
for #i 1 #size 1 // цикл для поиска картинок
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2 100 -1 10)
if size(%arr) > 1 // если найдено больше 1 картинки
init_arr %arr2 (#z) %arr [1 1] %arr [1 2] %arr [2 1] %arr [2 2]
set #z #z + 1
end_if
end_for
sort_array %arr2 1
kleft %arr2[1 1] %arr2[1 2]
wait 500
kleft %arr2[1 3] %arr2[1 4]
wait 500
set size(%arr2)
end_repeat
end_script
set #startX 0
set #startY 0
set #endX 1200
set #endY 720
set $path "c:\ima\"
init_arr %image c1 c2 c3 c4 c5 c6 c7 c8
set #size size(%image)
set findoffsetx 13 // смещение для координаты X
set findoffsety 11 // смещение для координаты Y
repeat 2
set #z 1
for #i 1 #size 1 // цикл для поиска картинок
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2 100 -1 10)
if size(%arr) = 4 // если найдено 4 картинки
init_arr %arr2 (#z) %arr [1 1] %arr [1 2] %arr [3 1] %arr [3 2]
set #z #z + 1
init_arr %arr2 (#z) %arr [2 1] %arr [2 2] %arr [4 1] %arr [4 2]
else
if size(%arr) = 2 // если найдено 2 картинки
init_arr %arr2 (#z) %arr [1 1] %arr [1 2] %arr [2 1] %arr [2 2]
set #z #z + 1
end_if
end_if
end_for
if #z > 1
sort_array %arr2 1
kleft %arr2[1 1] %arr2[1 2]
wait 500
kleft %arr2[1 3] %arr2[1 4]
wait 500
else
hint (20 clRed 500 500 -1 -1 (Не найдено одинаковых картинок))
end_if
set size(%arr2)
end_repeat
end_script
Ошибку теперь не выдаёт и работает цеклично, но если вылезают 2 одинаковых рисунка в верхней части, то скрипт вообще не реагирует. Это наверное по тому что не 4 квадратика одинаковых, а 3. Просто на нижний надо нажать 2 раза (но после первого нажатия он может немного сдвинутся, так что фактически его надо будет "найти" ещё раз). И ещё почему то если 2ой квадратик в верхней части находится выше 1ого, то он 2 раза
set #startX 0
set #startY 0
set #endX 1200
set #endY 720
set $path "c:\ima\"
init_arr %image c1 c2 c3 c4 c5 c6 c7 c8
set #size size(%image)
set findoffsetx 13 // смещение для координаты X
set findoffsety 11 // смещение для координаты Y
for #j 1 2
set #z 1
for #i 1 #size 1 // цикл для поиска картинок
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2 100 -1 10)
if size(%arr) = 3 // если найдено 3 картинки
if #j = 1
init_arr %arr2 (#z) %arr [1 1] %arr [1 2] %arr [3 1] %arr [3 2] // координаты первой и третьей
set #z #z + 1
else
init_arr %arr2 (#z) %arr [2 1] %arr [2 2] %arr [3 1] %arr [3 2] // координаты второй и третьей
set #z #z + 1
end_if
else
if size(%arr) = 2
init_arr %arr2 (#z) %arr [1 1] %arr [1 2] %arr [2 1] %arr [2 2]
set #z #z + 1
end_if
end_if
end_for
if #z > 1
sort_array %arr2 1
kleft %arr2[1 1] %arr2[1 2]
wait 500
kleft %arr2[1 3] %arr2[1 4]
wait 500
else
hint (20 clRed 500 500 -1 -1 (Не найдено одинаковых картинок))
end_if
set size(%arr2)
end_for
end_script
Господа, а причем тут раздел плагинов?
ДА! Это оно. Идеально! СПАСИБО большое за терпение и быстрые ответы.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)