Author Topic: Клик мышью ниже клика после поиска по пикселю  (Read 5005 times)

0 Members and 1 Guest are viewing this topic.

evgenm

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Доброго времени суток.
Подскажите плз возможно ли как то сделать чтобы после клика через поиск пикселя картинки, далее можно было-бы задать координаты только по вертикали, без указания горизонтальных координат.
(пробую применить на сайте чтобы предположим при заполнении обьявления кликнул по окну "метро" появляется выпадающее меню со списком метро и следующий клик был на нужное мне метро, которое находится на 50 пунктов ниже. в другой задаче плюс минус похожая проблема, которая могла-бы быть решена без указания горизонтальных координат)

спасибо


KEYDOWN (#CTRL)
WAIT(1)
KEYDOWN (#F)
WAIT(1)
KEYUP (#F)
KEYUP (#CTRL)
WAIT(1)
KEYSTRING("текст поиска") // набрать текст
WAIT(3)
// помещение текущего снимка экрана в буфер программы
// это необходимо для работы всех графических функций и процедур
getscreen
 
// --- конструкция поиска пикселя в буфере экрана ---
// координаты 0, 0, $_xmax, $_ymax описывают прямоугольную область, в которой будет осуществлен поиск. при этом $_xmax и $_ymax содержат максимально возможные значения для текущего разрешения экрана. 255 это код цвета, он соответствует красному. код цвета можно узнать в редакторе, наведя курсор на нужного цвета пиксель
// сама инструкция поиска if_pixel_in по сути представляет собой условие, то есть выполнение кода, который описан внутри условия, зависит от результата проверки самого условия (если пиксель найден) с учетом всех вышеописанных параметров.
if_pixel_in(0, 0, $_xmax, $_ymax, 1729791)
 
   // если пиксель заданного цвета найден, его координаты будут помещены в системные переменные $_return1 и $_return2. можно их распечатать в лог ...
   print("Цвет обнаружен в координатах: ", $_return1, ,":", $_return2)
 
   // ... а можно сразу кликнуть по нему левой кнопкой мыши
   lclick($_return1, $_return2)
 
else   // блок else (вместе с кодом) не обязателен, но он обеспечивает обработку ситуации, когда условие вернуло отрицательный результат
 
   // если ничего не найдено, выводим сообщение
   print("ничего не найдено")
 
end_if   // конец условия

здесь продолжение скрипта с кликом по координатам по вертикали
« Last Edit: June 01, 2016, 12:35:58 AM by evgenm »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Так продолжай использовать $_return1. Переменная не изменится пока не будут вызваны функции её использующие.
А лучше сохрани её в свою переменную и дальше используй её.
Code: (clickermann) [Select]
$xx = $_return1
P.S. Зачем сюда справку перепичатывать? Замусорил всю суть что хотел.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
По моему ему надо вот это
системные переменные в которые возвращаются координаты мыши
$_xmouse
$_ymouse
Code: (clickermann) [Select]
lclick($_return1, $_ymouse)

evgenm

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
По моему ему надо вот это
системные переменные в которые возвращаются координаты мыши
$_xmouse
$_ymouse
Code: (clickermann) [Select]
lclick($_return1, $_ymouse)

Да, скорее всего этот вариант подходит, насколько я предполагаю он указывает предыдущий клик $_return1 и последующий нужный клик $_ymouse, но как это в скрипте можно прописать?

например так?
lclick($_return1, $_ymouse)
LCLICK($_return1,1060)

или как-то по другому нужно

Попробовал реализовать, получилось чтобы произошел следующий клик, но опять же в такой реализации жесткая привязка к координатам по горизонтали $_return1, а вертикальный клик указывает жестко на заданные координаты $_ymouse.
У меня проблема в том, что на странице блок рекламы вверху страницы и он всегда разный по размерам (по высоте) при обновлении страницы.
Поэтому нельзя указать жестко координаты. Вот я и пробую найти возможность, если такая конечно есть, вести отсчет от точки при поиске пикселя.
как бы точка пикселя будет жестко прописана, а вверх или вниз движения мыши с отсчетом от нее.

Спасибо
« Last Edit: June 01, 2016, 11:37:21 AM by evgenm »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Значит я угадал, а не Андрей.


evgenm

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Значит я угадал, а не Андрей.
может быть, пока знаний у меня не хватает, но из тех тестов что попробовал, то пока тоже самое у меня выходит, что и в случае Андрея.
Используя Ваш пример нахожу точку пикселя, а координаты по вертикали прописаны жестко и это пока не помогло чтобы отсчет пошел от точки пикселя.
думаю не правильно прописываю код, но как правильно пока не понимаю

$xx = $_return1
lclick($_return1, 511)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Проблемы с формулировкой вопроса.

Давай так. Сделай скрин  на нём покажи что куда ты хочешь кликать и в каком порядке.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Может ты это хочешь?
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "metro.bmp")
   LCLICK($_return1,$_return2)  // клик по выпадающему списку
   WAITMS(300)
   LCLICK($_return1,$_return2 + 20*8) // клик по 8-й строке списка. 20 пкс/строка * 8 строк = 160 пикселов ниже
   WAITMS(100)
END_IF


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Можно и так:
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "metro.bmp")
    LCLICK($_return1,$_return2)
    WAITMS(300)
   
    // дальше 8 раз клавиша "вниз"
    FOR($i=0, $i < 8)
        KEYPRESS(#DOWN)
        WAITMS(100)
    END_CYC
    KEYPRESS(#ENTER)
    WAITMS(300)
END_IF

Кликнули по выпадающему списку. Список открылся и фокус перевёлся на него. Нажимаем вниз/вверх/PAGEDOWN/PAGEUP для навигации по нему.
Потом ENTER


evgenm

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Проблемы с формулировкой вопроса.

Давай так. Сделай скрин  на нём покажи что куда ты хочешь кликать и в каком порядке.

evgenm

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
находим слово Станция метро
кликаем ниже где окно для записей
прописываем новок
выбираем кликом ниже Новокосино

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Любой из примеров выше.

Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "metro.bmp") // ищем 'Станция метро'
    LCLICK($_return1+300, $_return2+30)  // клик по выпадающему списку
    WAITMS(300)
    KEYSTRING("новок", 30)
    WAITMS(70)
    LCLICK($_return1+300, $_return2+85)  // клик по 2 пункту
    WAITMS(100)
END_IF

Проще сразу набирать полное название, чего мучаться
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "metro.bmp") // ищем 'Станция метро'
    LCLICK($_return1+300, $_return2+30)  // клик по выпадающему списку
    WAITMS(300)
    KEYSTRING("новокосино", 30)
    WAITMS(70)
    KEYPRESS(#ENTER)
    WAITMS(300)
END_IF


evgenm

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Любой из примеров выше.

Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "metro.bmp") // ищем 'Станция метро'
    LCLICK($_return1+300, $_return2+30)  // клик по выпадающему списку
    WAITMS(300)
    KEYSTRING("новок", 30)
    WAITMS(70)
    LCLICK($_return1+300, $_return2+85)  // клик по 2 пункту
    WAITMS(100)
END_IF

Проще сразу набирать полное название, чего мучаться
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "metro.bmp") // ищем 'Станция метро'
    LCLICK($_return1+300, $_return2+30)  // клик по выпадающему списку
    WAITMS(300)
    KEYSTRING("новокосино", 30)
    WAITMS(70)
    KEYPRESS(#ENTER)
    WAITMS(300)
END_IF

Супер, спасибо большое, сразу пару новинок показали которые раньше не использовал)
это поиск по картинке, а не пикселю
и указания координат
 LCLICK($_return1+300, $_return2+30)
не знал что через + можно задавать координаты
век живи век учись
Сам пока мало помогающих скриптов создал, но штуки3-4 уже есть в запасе которые помогли пару сотен тысяч действий сократить ручной работы

В этом что создаю тоже заморочки, можно импортировать обьявления, но телефон, почта и метро не импортируются и приходится вручную эти три пункта подправлять, а если обьявлений 1 тыс или более, то уже трудоемко

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Может экспортируются?

В этом ничего сложного нет. Сам подобные формы заполняю.
На однотипные пункты прописываю жёстко.
На пункты с вариантами прописываю вариант (или случайность если нужно).
Значения некоторых пунктов вычисляю.
Те, которые в "линейке" объектов всегда разные... заношу либо из файла, либо из тут же заданного массива.

Вот один из десятков вариантов:
[spoiler]
Code: (clickermann) [Select]
#include "..\Libs\Copy_Paste.cms"
#include "..\Libs\brawser.cms"
#name "Занесение атрибутов по одному"


WAITMS(500)
$all = 10

STRSEPARATE("4:6:8:10:12:4:6:8:10:12", ":", $nap)
STRSEPARATE(" 6,2 м3/час: 7,7 м3/час: 8,6 м3/час: 9,3 м3/час: 9,9 м3/час: 7,8 м3/час: 9,3 м3/час:10,2 м3/час:10,5 м3/час: 9,9 м3/час", ":", $pr)

FOR($iter=0, $iter < $all)
   next_tab()
   WAITMS(1000)
   HINTPOPUP(STRCONCAT("из ", $all), $iter + 1)
   
   $s = $nap[$iter]
   IF(STRLEN($s) < 2)
      $par =  STRCONCAT("  ", $s, " м")
   ELSE
      $par =  STRCONCAT(" ", $s, " м")
   END_IF
   
   
   LCLICK(400,324)  // 14651459
   WAITMS(600)
   LCLICK(406,394)  // 16777215
   WAITMS(800)
   FOR($i=0, $i < 3)
      KEYPRESS(#PAGEDOWN)
      WAITMS(300)
   END_CYC
   
   LCLICK(504,481)  // производительность   3
//   LCLICK(515,784)  // материал, напор  2
//   LCLICK(456,497)  // тип  3
   
   
   WAITMS(500)
   LCLICK(322,463)
   WAITMS(500)
   
   TOCLIP($pr[$iter]))  // производительность "14,0 м3/час"
//   TOCLIP($par)  // напор
//   TOCLIP("нержавеющая сталь")  // чугун, нержавеющая сталь, хромоникелевая сталь
//   TOCLIP("циркуляционный")  // скважинный
   
   WAITMS(80)
   paste()
   WAITMS(300)
   LCLICK(266,507)  // 8880640
   WAITMS(1000)
END_CYC

HALT
[/spoiler]


evgenm

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Нет пока не экспортируются, сложности у хозяина доски, пытается настроить, но пока не настроил

вы сказали что сами не мало отправляете обьявлений, может как то можно договорится и мои обьявления отправить тоже?)