Author Topic: [Excel, браузер] Каждую итерацию координаты клика уходят примерно на 30px вниз  (Read 3146 times)

0 Members and 1 Guest are viewing this topic.

Ri

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Каждую итерацию коо клика переносятся ~ на 30 пикселей вниз.
Мой скрипт довольно длинный, но несложный. Он копирует значения из Excel, и в браузере вставляет их. Так надо сделать n раз (примерно 25-50). Первый раз я ищу, куда кликать, сравнивая картинки, но это занимает долгое время. Так что я запоминаю координаты, создаю цикл с таким же кодом (кроме поиска картинки), и в цикле уже кликаю в конкретное место. Первый повтор всё ок, потом мышка спускается вниз (примерно y => y+30px)  каждую итерацию. Если тестировать куски кода, то клики не сдвигаются. Помогите, пожалуйста, разобраться  :-[
Code: (clickermann) [Select]
$n_patient = 5 // ЗАПОЛНИТЬ количеством пациентов в файле

//нажать на поле
LCLICK($_return1, $_return2)
WAITMS (100)

//Копировать значение
WAITMS (150)
KEYDOWN (#CTRL)
WAITMS (200)
KEYDOWN (#C)
WAITMS (1000)
KEYUP (#C)
KEYUP (#CTRL)

// первый переход в гугл, получение координат
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, $_xmax,50, "chrome.bmp", -1, 80)    //панель mustb сверху
   LCLICK($_return1, $_return2)
   $chrome_x = $_return1
   $chrome_y = $_return2
   WAITMS(1000)
END_IF

// жмяк на Добавить
GETSCREEN // снимок
COLORMODE(6) // цветокоррекция снимка
IF_PICTURE_IN (1000,0,$_xmax,200, "add.bmp", -1, 60) // поиск с 60% совпадением
   LCLICK($_return1, $_return2)
   $add_x = $_return1+10
   $add_y = $_return2+10
   WAITMS(1500)
END_IF


//жмяк в поле ввода иин
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (400,200, 1500,400, "leftfromlupa.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   $leftfromlupa_x = $_return1
   $leftfromlupa_y = $_return2
   WAITMS(1000)
END_IF

//вставка иин
KEYDOWN (#CTRL)
WAITMS (100)
KEYDOWN (#V)
WAITMS (100)
KEYUP (#V)
KEYUP (#CTRL)
WAITMS (150)

//поиск по иин
KEYDOWN (#ENTER)
WAITMS (150)
KEYUP (#ENTER)
WAITMS (500)    // ждём, пока выскочит

//жмяк по выскочившему фио
LCLICK($_return1, $_return2+50)
$poppedup_fio_x = $_return1
$poppedup_fio_y = $_return2+50
WAITMS (500)

//первый переход в Эксель, получение координат
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0,$_xmax,50, "excel.bmp", -1, 60)
   LCLICK($_return1, $_return2)
   $excel_x = $_return1
   $excel_y = $_return2
   WAITMS(1000)
END_IF

//Переход на поле справа
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//Копировать значение
WAITMS (150)
KEYDOWN (#CTRL)
WAITMS (150)
KEYDOWN (#C)
WAITMS (150)
KEYUP (#C)
KEYUP (#CTRL)

// переход в гугл
LCLICK($chrome_x, $chrome_y)
WAITMS(1000)


 // переход в поле № снимка
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (400,300, 1000,700, "shotnumber.bmp", -1, 100)  // скрин содержит и надпись Дата осмотра
   LCLICK($_return1+200, $_return2+20)
   $shotnumber_x = $_return1+200
   $shotnumber_y = $_return2+30
   WAITMS(1000)
END_IF

//вставка номера снимка
KEYDOWN (#CTRL)
WAITMS (150)
KEYDOWN (#V)
WAITMS (150)
KEYUP (#V)
KEYUP (#CTRL)
WAITMS (150)

//переход в Эксель
LCLICK($excel_x, $excel_y)
WAITMS(1000)


//Переход на поле справа
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//Копировать даты
WAITMS (150)
KEYDOWN (#CTRL)
WAITMS (150)
KEYDOWN (#C)
WAITMS (150)
KEYUP (#C)
KEYUP (#CTRL)

// переход в гугл
LCLICK($chrome_x, $chrome_y)
WAITMS(1000)

//Переход через Дообследование
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//на Дату осмотра
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//вставка даты
KEYDOWN (#CTRL)
WAITMS (100)
KEYDOWN (#V)
WAITMS (100)
KEYUP (#V)
KEYUP (#CTRL)
WAITMS (150)

//Переход через Направлен
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//на Дозу
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//ввод дозы = 5
KEYDOWN (#5)
WAITMS (100)
KEYUP (#5)
WAITMS (100)


//переход в Эксель
LCLICK($excel_x, $excel_y)
WAITMS(1000)

//Переход на поле справа
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//Копировать дату след посещения
WAITMS (150)
KEYDOWN (#CTRL)
WAITMS (150)
KEYDOWN (#C)
WAITMS (1000)
KEYUP (#C)
KEYUP (#CTRL)

// переход в гугл
LCLICK($chrome_x, $chrome_y)
WAITMS(1000)

//Переход на дату след посещения
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//вставка даты  след посещения
KEYDOWN (#CTRL)
WAITMS (100)
KEYDOWN (#V)
WAITMS (100)
KEYUP (#V)
KEYUP (#CTRL)
WAITMS (150)


//переход в Эксель
LCLICK($excel_x, $excel_y)
WAITMS(1000)

//Переход на поле справа (дата первого посещения)
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//Копировать дату первого посещения
WAITMS (150)
KEYDOWN (#CTRL)
WAITMS (150)
KEYDOWN (#C)
WAITMS (150)
KEYUP (#C)
KEYUP (#CTRL)

// переход в гугл
LCLICK($chrome_x, $chrome_y)
WAITMS(1000)

//переход в подвкладку Заключение      !!!
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (500,300,900,500, "conclusion.bmp", -1, 95)
   LCLICK($_return1, $_return2)
   $conclusion_x = $_return1
   $conclusion_y = $_return2+40
   WAITMS(1000)
   LCLICK($_return1, $_return2)  //подвкладка опустится, будет видна кнопка Отмена
END_IF

//переход через Данные учёта (при Табе 1я ссылка)
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//и переход через ссылку Заключение
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)

//на Дату первого посещения
KEYDOWN (#TAB)
WAITMS (100)
KEYUP (#TAB)
WAITMS (100)


//вставка даты первого посещения
KEYDOWN (#CTRL)
WAITMS (150)
KEYDOWN (#V)
WAITMS (150)
KEYUP (#V)
KEYUP (#CTRL)
WAITMS (150)

//жмяк отмены
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (750,450, $_xmax,$_ymax, "cancel.bmp", -1, 90)
   LCLICK($_return1, $_return2)
   $cancel_x = $_return1
   $cancel_y = $_return2   
   WAITMS(500)
END_IF

//переход в Эксель
LCLICK($excel_x, $excel_y)
WAITMS(1000)

//убираем выделение поля
KEYDOWN (#ENTER)
WAITMS (150)
KEYUP (#ENTER)
WAITMS (500)    // ждём, пока выскочит

//переход на ИИН след человека
KEYDOWN (#DOWN)   // переведёт строку вниз
WAITMS (100)
KEYUP (#DOWN)
WAITMS (100)
KEYDOWN (#LEFT)   // переведёт строку влево      1
WAITMS (100)
KEYUP (#LEFT)
WAITMS (100)
KEYDOWN (#LEFT)   // переведёт строку влево    2
WAITMS (100)
KEYUP (#LEFT)
WAITMS (100)
KEYDOWN (#LEFT)   // переведёт строку влево   3
WAITMS (100)
KEYUP (#LEFT)
WAITMS (100)
KEYDOWN (#LEFT)   // переведёт строку влево    4
WAITMS (100)
KEYUP (#LEFT)
WAITMS (100)

$i = 0
print($i)
print($n_patient)
WHILE($i < $n_patient)
  print($i)
  print("Вошёл в цикл")
  //нажать на поле
  //LCLICK(-1,-1)
  //WAITMS (10000)

  //Копировать значение
  WAITMS (2000)
  KEYDOWN (#CTRL)
  WAITMS (200)
  KEYDOWN (#C)
  WAITMS (200)
  KEYUP (#C)
  WAITMS (100)
  KEYUP (#CTRL)
  WAITMS (1000)
  print("Скопировал")
 
  // жмяк в гугл
  LCLICK($chrome_x, $chrome_y)
  WAITMS(1000)
  print("Перешёл в гугл")
 
  // жмяк на кнопку Добавить
  LCLICK($add_x, $add_y)
  WAITMS(5000)
  print("Нажал на кнопку Добавить")

  // жмяк в поле ввода иин
  LCLICK($leftfromlupa_x, $leftfromlupa_y)
  WAITMS(1500)
  print("Нажал в поле ввода иин")

  //вставка иин
  KEYDOWN (#CTRL)
  WAITMS (100)
  KEYDOWN (#V)
  WAITMS (100)
  KEYUP (#V)
  KEYUP (#CTRL)
  WAITMS (150)
  print("Вставил иин")

  //поиск по иин. нажать в поле, чтобы сайт поискал
  KEYDOWN (#ENTER)
  WAITMS (150)
  KEYUP (#ENTER)
  WAITMS (500)    // ждём, пока выскочит
  print("Нажал Enter, чтобы сайт поискал")

  //жмяк по выскочившему фио
  LCLICK($poppedup_fio_x, $poppedup_fio_y)
  WAITMS(1000)
  print("Нажал по выскочившему фио")

  //переход в Эксель
  LCLICK($excel_x, $excel_y)
  WAITMS(1000)

  //Переход на поле справа
  KEYDOWN (#TAB)
  WAITMS (100)
  KEYUP (#TAB)
  WAITMS (100)

  //Копировать значение
  WAITMS (150)
  KEYDOWN (#CTRL)
  WAITMS (150)
  KEYDOWN (#C)
  WAITMS (150)
  KEYUP (#C)
  KEYUP (#CTRL)

  // переход в гугл
  LCLICK($chrome_x, $chrome_y)
  WAITMS(1000)

  // переход в поле № снимка
  LCLICK($shotnumber_x, $shotnumber_y)
  WAITMS(50)
  print("Перешёл на номер снимка")
  WAITMS(1000)

  //вставка номера снимка
  KEYDOWN (#CTRL)
  WAITMS (150)
  KEYDOWN (#V)
  WAITMS (150)
  KEYUP (#V)
  KEYUP (#CTRL)
  WAITMS (150)
  print("Вставил номер снимка")

  //переход в Эксель
  LCLICK($excel_x, $excel_y)
  WAITMS(1000)
  print("Перешёл в Эксель")


  //Переход на поле справа
  KEYDOWN (#TAB)
  WAITMS (100)
  KEYUP (#TAB)
  WAITMS (100)

  //Копировать дату осмотра
  WAITMS (150)
  KEYDOWN (#CTRL)
  WAITMS (150)
  KEYDOWN (#C)
  WAITMS (150)
  KEYUP (#C)
  KEYUP (#CTRL)
  print("Скопировал дату осмотра")

  // переход в гугл
  LCLICK($chrome_x, $chrome_y)
  WAITMS(1000)
  print("Перешёл в гугл")
 

  //Переход через Дообследование
  KEYDOWN (#TAB)
  WAITMS (100)
  KEYUP (#TAB)
  WAITMS (100)
  print("TAB")

  //на Дату осмотра
  KEYDOWN (#TAB)
  WAITMS (100)
  KEYUP (#TAB)
  WAITMS (100)
  print("TAB")

  //вставка даты
  KEYDOWN (#CTRL)
  WAITMS (100)
  KEYDOWN (#V)
  WAITMS (100)
  KEYUP (#V)
  KEYUP (#CTRL)
  WAITMS (150)
  print("Вставил дату осмотра")

  //Переход через Направлен
  KEYDOWN (#TAB)
  WAITMS (100)
  KEYUP (#TAB)
  WAITMS (100)

  //на Дозу
  KEYDOWN (#TAB)
  WAITMS (100)
  KEYUP (#TAB)
  WAITMS (100)

  //ввод дозы = 5
  KEYDOWN (#5)
  WAITMS (100)
  KEYUP (#5)
  WAITMS (100)


  //переход в Эксель
  LCLICK($excel_x, $excel_y)
  WAITMS(1000)

  //Переход на поле справа
  KEYDOWN (#TAB)
  WAITMS (100)
  KEYUP (#TAB)
  WAITMS (100)

  //Копировать дату след посещения
  WAITMS (150)
  KEYDOWN (#CTRL)
  WAITMS (150)
  KEYDOWN (#C)
  WAITMS (1000)
  KEYUP (#C)
  KEYUP (#CTRL)

  // жмяк в гугл
  LCLICK($chrome_x, $chrome_y)
  WAITMS(1000)

  //Переход на дату след посещения
  KEYDOWN (#TAB)
  WAITMS (100)
  KEYUP (#TAB)
  WAITMS (100)

  //вставка даты  след посещения
  KEYDOWN (#CTRL)
  WAITMS (100)
  KEYDOWN (#V)
  WAITMS (100)
  KEYUP (#V)
  KEYUP (#CTRL)
  WAITMS (150)


  //переход в Эксель
  LCLICK($excel_x, $excel_y)
  WAITMS(1000)

  //Переход на поле справа (дата первого посещения)
  KEYDOWN (#TAB)
  WAITMS (100)
  KEYUP (#TAB)
  WAITMS (100)


  //Копировать дату первого посещения
  WAITMS (150)
  KEYDOWN (#CTRL)
  WAITMS (150)
  KEYDOWN (#C)
  WAITMS (150)
  KEYUP (#C)
  KEYUP (#CTRL)

  // жмяк в гугл
  LCLICK($chrome_x, $chrome_y)
  WAITMS(1000)

  //переход в подвкладку Заключение
  LCLICK($conclusion_x, $conclusion_y)
  WAITMS(1000)
  print("Перешёл в подвкладку Заключение")


  //переход через Данные учёта (при Табе 1я ссылка)
  KEYDOWN (#TAB)
  WAITMS (150)
  KEYUP (#TAB)
  WAITMS (2000)    //!!!
  print("Внимание TAB")

  //и переход через ссылку Заключение
  KEYDOWN (#TAB)
  WAITMS (150)
  KEYUP (#TAB)
  WAITMS (2000)
  print("Внимание TAB")

  //на Дату первого посещения
  KEYDOWN (#TAB)
  WAITMS (150)
  KEYUP (#TAB)
  WAITMS (2000)
  print("Внимание TAB, потом вставка и Enter")


  //вставка даты первого посещения
  KEYDOWN (#CTRL)
  WAITMS (150)
  KEYDOWN (#V)
  WAITMS (150)
  KEYUP (#V)
  KEYUP (#CTRL)
  WAITMS (2000)     //150
  print("Вставил дату первого посещения")

  //жмяк отмены
  LCLICK($cancel_x, $cancel_y)
  WAITMS(1000)
  print("Нажал на Отмену")

  //переход в Эксель
  LCLICK($excel_x, $excel_y)
  WAITMS(1000)

  //убираем выделение поля
  KEYDOWN (#ENTER)
  WAITMS (150)
  KEYUP (#ENTER)
  WAITMS (500)   

  //переход на ИИН след человека
  KEYDOWN (#DOWN)   // переведёт строку вниз
  WAITMS (100)
  KEYUP (#DOWN)
  WAITMS (100)
  KEYDOWN (#LEFT)   // переведёт строку влево      1
  WAITMS (100)
  KEYUP (#LEFT)
  WAITMS (100)
  KEYDOWN (#LEFT)   // переведёт строку влево    2
  WAITMS (100)
  KEYUP (#LEFT)
  WAITMS (100)
  KEYDOWN (#LEFT)   // переведёт строку влево   3
  WAITMS (100)
  KEYUP (#LEFT)
  WAITMS (100)
  KEYDOWN (#LEFT)   // переведёт строку влево    4
  WAITMS (100)
  KEYUP (#LEFT)
  WAITMS (100)
  print("Конец итерации")
  inc($i)
END_CYC
« Last Edit: August 17, 2017, 07:39:04 AM by Ri »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Почему у тебя $_return вне условия поиска? Это системные переменные для вывода найденных координат. Значения в них не обнуляются даже после остановки скрипта. Поэтому они должны быть всегда в условиях поиска для возврата найденных значений.
У тебя сразу в начале кода
Code: (clickermann) [Select]
LCLICK($_return1, $_return2)При первом запуске кликера там будет 0,0 а потом последние найденные координаты.

И вообще гораздо лучше экспортировать таблицу в TXT в разделителями по Tab и работать потом с файлом напрямую.

Ri

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Почему у тебя $_return вне условия поиска? Это системные переменные для вывода найденных координат. Значения в них не обнуляются даже после остановки скрипта. Поэтому они должны быть всегда в условиях поиска для возврата найденных значений.
У тебя сразу в начале кода
Code: (clickermann) [Select]
LCLICK($_return1, $_return2)При первом запуске кликера там будет 0,0 а потом последние найденные координаты.

И вообще гораздо лучше экспортировать таблицу в TXT в разделителями по Tab и работать потом с файлом напрямую.

1. Согласна, не правильно, но в данном случае он отрабатывает и отрабатывает только 1 раз. Эту строку можно вообще удалить, я её для подстраховки написала, чтобы кликер точно щёлкнул.   :)
2. Мне надо, чтобы человек непосредственно видел, что происходит, поэтому такие заморочки с Экселем. Сам Эксель не гонит, я подогнала табами и стрелками) а вот с браузером проблемки
« Last Edit: August 18, 2017, 07:11:48 AM by Ri »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
По полям ввода в браузере тоже должно переключаться по TAB. Это проще чем кликать, особенно если полей много и на экран все не влазят.


Первый раз я ищу, куда кликать, сравнивая картинки, но это занимает долгое время.
Поиск довольно быстрый, если не делать огромными образцы. достаточно от 5х5 до 50х50. Иногда удобней 2х15, 2х50 и т.д.

В GETSCREEN и COLORMODE можно тоже задавать область.
Code: (clickermann) [Select]
GETSCREEN(0,0, $_xmax,50)
COLORMODE(6, 0,0, $_xmax,50)
IF_PICTURE_IN(0,0, $_xmax,50, "chrome.bmp", -1, 80)

И процент совпадения - 60% это плохой процент. Обычно там начинаются ложные срабатывания. Рабочий диапазон 75-100, в крайнем случае от 70.


А не проще, вместо прыганья туда-сюда на каждый чих, сначала пробежаться по нужным данным сохраняя их в переменные. Потом переключать на браузер и вставлять все сохранённые. Повторить для другого пациента.

Есть цикл по пациентам, переменная цикла $i. Но она только используется для отсчёта количества пациентов и в кликах нигде не используется.
Следующий пациент это как раз и есть на 30 пкс ниже?

Не видя первого и второго подсказать точнее невозможно.

P.S.
Code: (clickermann) [Select]
    KEYDOWN (#ENTER)
    WAITMS (150)
    KEYUP (#ENTER)
    WAITMS (500)    // ждём, пока выскочит
    print("Нажал Enter, чтобы сайт поискал")
//жмяк по выскочившему фио
Это прямой путь к сбиванию скрипта. Как только выскакивание протормозит больше 500 мс, так всё дальнейшее пойдёт насмарку.
« Last Edit: August 17, 2017, 11:10:26 AM by Vint »


Ri

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Quote
По полям ввода в браузере тоже должно переключаться по TAB.
Тут я опасаюсь, что один из 12и TABов подряд может сбиться. А в начале  TABом просто не перейдёшь.
Quote
Следующий пациент это как раз и есть на 30 пкс ниже?
Да, 1 цикл - 1 человек. $i - просто для конечного количества выполнений цикла.

Спасибо за хорошие советы, попробую оптимизировать скрипт.

Ri

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Воспользовалась советами Vint'а, скрипт получилось сделать :D
Идею запоминать координаты отбросила, т.к. скрипт стал выполняться с нормальной скоростью после урезки места поиска картинки + подумала, что в некоторых местах координатами бы не обошлось (появится/ не появиться картинка) 
TAB'ы убрала в циклы и сделала один большой цикл  без повторения кода 2 раза.
Ещё раз спасибо за ответы)
« Last Edit: August 17, 2017, 11:08:54 PM by Ri »