Author Topic: Копирование ссылок из вкладок браузера и вставка их в столбик. HELP!!!  (Read 4273 times)

0 Members and 1 Guest are viewing this topic.

SimplY

  • Активный участник
  • ***
  • Posts: 125
    • View Profile
Извиняюсь, что пропал.. Не было возможности протестировать на другом ПК. Протестировал в итоге. Проблемы те же.

Quote
Другой вариант, почему координаты могут не совпадать, это если вы используете привязку. Убедитесь, что при запуске скрипта (в маленьком окне Кликермана, когда закрыли редактор) написано "привязка к окну Статус Выкл.).
Привязка штука тонкая, сложная, и обычно к ней надо приноравливаться, так что если есть минимальная возможность работать без нее - так и следует делать (а с тем, что работаете сразу в двух окнах, значит надо будет перепривязываться попеременно и вообще веселиться по полной. Вам она незачем). Да и в принципе, даже если планируется в итоге работать с привязкой, изначально проверять работоспособность кода надо без нее.
Привязки нет.

Quote
Когда попробуйте, отпишитесь что написал в логах (если он увидел картинки).
Он не видит картинки.

Quote
P.S. Вариант без графического анализа уже опробован. Но опять же, с отключенной привязкой его надо, ну и вообще выяснить, двигается ли мышка и засчитываются ли нажатия клавиш.
Мышка нигде не двигается.

Quote
Кстати, у вас на том браузере смена вкладок через cntrl+tab работает?
Да.

Вообще я предлагаю проще сделать)
Просто копирование вкладок подряд, начиная со 2-й вкладки..
Просто я не знаю, как сделать так, чтобы он закончил копировать, когда закончится последняя вкладка.

2) Я не знаю, как сделать так, чтобы при нажатии по скриншоту, но при этом нажимался по координатам правее, левее, как поставлены координаты х и у. Подскажите пожалуйста, что нужно добавить?
Code: [Select]
GETSCREEN(0,0,400,400)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(300)
END_IF
Буду благодарен)
Вообще интересно, почему не получается и если вы ходите разобраться, почему, можно поэкспериментировать)
« Last Edit: December 05, 2018, 09:10:10 PM by SanSib »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
2) Я не знаю, как сделать так, чтобы при нажатии по скриншоту, но при этом нажимался по координатам правее, левее, как поставлены координаты х и у. Подскажите пожалуйста, что нужно добавить?
Code: [Select]
GETSCREEN(0,0,400,400)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(300)
END_IF

Кликер позволяет производить вычисления прямо в параметрах функций.

Code: (clickermann) [Select]
GETSCREEN(0,0,400,400)
IF_PICTURE_IN (0,0, 400,400, "file.bmp", -1, 100)
   LCLICK($_return1+20, $_return2+5) // клик правее на 20 пикселов и ниже на 5
   WAITMS(300)
END_IF

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Ну значит пока пробуем второй вариант, без обработки графики.
Правда, если мышка не двигается и ничего не нажимается, это и будет нашей главной проблемой.
 Координаты кликов придется поправить. По умолчанию, запускайте когда находитесь на последней или первой вкладке. Если все ок, то сделав круг, он остановится (название первой обрабатываемой им вкадки должно быть уникальным, не повторяться).
После проверки скопируйте сюда лог (сайты можете поменять на условное нечто, ну или запросы гугл искать вместо нужного), будем думать, что дальше делать.
Code: (clickermann) [Select]
$site=google.com    //название вашего сайта
$log=1              // для проверки, движения, а не прыганья курсора мышки и отчета в логах =1, иначе - 0
/////////////////////////////////////////
$str=0              //не обязательно задавать переменные, но пусть будут)
$str1=0
SUB(click,$x,$y,$time)    //подпрограмма, для упрощения правки
   If($log=1)
      Print("click ",$x,"-",$y )
      move($x,$y)
      waitms(200)
   End_if
   LCLICK($x,$y)
   waitms($time)
end_sub

wait(2)

WHILE(1)                         //бесконечный цикл
   CLICK(896,190,50)  // клик по браузеру, чтобы горячие клавиши стали активны. Первые две цифры  -- координаты, третья - время, оставьте так
   waitms(200)
   KEYDOWN(#CTRL) //для большинства браузеров смена вкладки выглядит как кнтрл+таб, можно заменить на кнтрл+ф1-12, для вызова конкретной вкладки. Но если так сработает, прога будет универсальнее
   Waitms(30)
   KEYPRESS(#tab)
   Waitms(30)
   KEYUP(#CTRL)
   wait(1)
   FOR($a=0,$a<3)         // ну тут все просто - у меня не всегда срабатывает выделение с 1 клика, а с 3-ного гарантированно выделяет строку. Замените под себя.
      CLICK(778,65,20)
   END_CYC
   
   KEYDOWN(#CTRL)            //копировать выделенное
   KEYPRESS(#C)
   KEYUP(#CTRL)
   
   $str= FROMCLIP ()            //перенос скопированного из буфера в память кликера
   If($log=1)                 // запись в лог адреса ссылки, если лог=1
      Print("str: ",$str )
      waitms(200)
   End_if
   
   If($str1=0)                 // запоминание адреса первой проверяемой страницы
      $str1=$str
   Else
      If($str1=$str)          // если снова адрес совпадет с первым, значит прошли полный круг, и надо закрыть программу
         Print("All done")
         halt         //
      End_if
   End_if
   
   
   If(STRLEN($str)>0)       //если адрес скопировался и лежит в буфере
      If(STRPOS($str, $site)>0)    //если в адресе присутствует название нашего сайта
         CLICK(1200,200,200)           //Клик в приложении - поправьте координаты
       //CLICK(1200,200,200)           //Кажется там еще второй клик в приложении - поправьте координаты и уберите слеши перед клик
         KEYDOWN(#CTRL)               //Вставка
         KEYPRESS(#V)
         KEYUP(#CTRL)
      //   KEYPRESS(#enter)         // у меня энтер, т.к. проверялось на блокноте
      End_if
      Else
      Print("nothing")
   End_if
   wait(1)                  //большая задержка не обязательна, но пока правим, стоит ставить подобные, причем почаще: думаю, все кто пару раз запускали бесконечные циклы без задержек и автоматического завершения, а потом  вынуждены были останавливать работу через перезагрузку компа, завели подобную полезную привычку)
END_CYC
//halt
« Last Edit: December 06, 2018, 01:02:39 AM by Qwerry »

SimplY

  • Активный участник
  • ***
  • Posts: 125
    • View Profile
Code: [Select]
Я пытался по разному. Цепляет от силы 2 вкладки. Максимум.
[code-clickermann]
$site=otc.ru    //название вашего сайта
$log=1              // для проверки, движения, а не прыганья курсора мышки и отчета в логах =1, иначе - 0
/////////////////////////////////////////
$str=0              //не обязательно задавать переменные, но пусть будут)
$str1=0
SUB(click,$x,$y,$time)    //подпрограмма, для упрощения правки
   If($log=1)
      Print("click ",$x,"-",$y )
      move($x,$y)
      waitms(200)
   End_if
   LCLICK($x,$y)
   waitms($time)
end_sub
 
wait(2)
 
WHILE(1)                         //бесконечный цикл
   CLICK(896,190,50)  // клик по браузеру, чтобы горячие клавиши стали активны. Первые две цифры  -- координаты, третья - время, оставьте так
   waitms(200)
   KEYDOWN(#CTRL) //для большинства браузеров смена вкладки выглядит как кнтрл+таб, можно заменить на кнтрл+ф1-12, для вызова конкретной вкладки. Но если так сработает, прога будет универсальнее
   Waitms(30)
   KEYPRESS(#tab)
   Waitms(30)
   KEYUP(#CTRL)
   wait(1)
   FOR($a=0,$a<1)         // ну тут все просто - у меня не всегда срабатывает выделение с 1 клика, а с 3-ного гарантированно выделяет строку. Замените под себя.
      CLICK(867,52,20)
   END_CYC
 
   KEYDOWN(#CTRL)            //копировать выделенное
   KEYPRESS(#C)
   KEYUP(#CTRL)
 
   $str= FROMCLIP ()            //перенос скопированного из буфера в память кликера
   If($log=1)                 // запись в лог адреса ссылки, если лог=1
      Print("str: ",$str )
      waitms(200)
   End_if
 
   If($str1=0)                 // запоминание адреса первой проверяемой страницы
      $str1=$str
   Else
      If($str1=$str)          // если снова адрес совпадет с первым, значит прошли полный круг, и надо закрыть программу
         Print("All done")
         halt         //
      End_if
   End_if
 
 
   If(STRLEN($str)>0)       //если адрес скопировался и лежит в буфере
      If(STRPOS($str, $site)>0)    //если в адресе присутствует название нашего сайта
         CLICK(171,753,200)           //Клик в приложении - поправьте координаты   
   
       CLICK(531,418,200)           //Кажется там еще второй клик в приложении - поправьте координаты и уберите слеши перед клик
         KEYDOWN(#CTRL)               //Вставка
         KEYPRESS(#V)
         KEYUP(#CTRL)
      //   KEYPRESS(#enter)         // у меня энтер, т.к. проверялось на блокноте
      End_if
      Else
      Print("nothing")
   End_if
   wait(1)                  //большая задержка не обязательна, но пока правим, стоит ставить подобные, причем почаще: думаю, все кто пару раз запускали бесконечные циклы без задержек и автоматического завершения, а потом  вынуждены были останавливать работу через перезагрузку компа, завели подобную полезную привычку)
END_CYC
//halt

В общем результат какой-то есть)
Мышка реагирует. Но странно выделяет сайты и копирует/вставляет только домен. Сначала смотрит все сайты, если домен совпадает, он выделяет домен и ничего больше не делает! Один раз вставил в блокнот (пока сам решил экспериментировать на блокноте) только домен сайта.
Дело в том, что копировать мне нужно несколько разных страничек с одного сайта. Ссылки соответственно разные, но один домен сайта.

В общем, спасибо Вам огромное!!!)
2) Я хотел бы сам поразбираться в коде. И ваше время неудобно забирать)

Единственное, что мне не понятно, как остановить Ctrl+Tab, если закончились вкладки? 1 сайт - это закрепленная вкладка с нашим сервисом. Совершенно другой домен. Остальные вкладки имеют один домен. Если вы скажете, как именно это сделать, чтобы Ctrl+Tab нажимался до 1 вкладки, код будет готов)

Я сам сейчас составлю небольшой код) Но я не умею делать так, чтобы он только 1 круг сделал)

У кликермана есть свой собственный буфер обмена? Я что-то не слышал об этом)

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
> Я пытался по разному. Цепляет от силы 2 вкладки. Максимум.
 
В какой из версий - первой, с графикой или второй, без? Почему 2 вкладки? Совпадает ли у этих вкладок домен?  Выделяется ли после клика по адресной строке вся строка, или же только ее часть? Не является ли место, куда мы копируем, первой вкладкой, из-за чего последующий кнтрл+таб снова приводит к уже обработанной вкладке, отчего кликер пишет "all done" т.к. думает, что он сделал круг? Думайте, думайте, анализируйте...

И да, где же ваши логи?
После проверки скопируйте сюда лог (сайты можете поменять на условное нечто, ну или запросы гугл искать вместо нужного), будем думать, что дальше делать.
Извините, но я искренне сомневаюсь, что вы сами неким магическим образом внезапно лучше понимаете, что делала программа и почему она так делала, нежели сама эта программа. А потому надо прочитать логи, и только после пытаться анализировать, что и как. Я, увы, работаю без магического шара, так что тоже не могу вот так дистанционно прочитать их у вас и понять в чем дело. 

> У кликермана есть свой собственный буфер обмена? Я что-то не слышал об этом)

И я про это не знаю, и ничего подобного у меня не было.  Но кликер может брать информацию из буфера обмена (фромклип) и записывать к себе в переменные (и он в логах пишет, что же в буфере обмена оказалось - видели?). А уже переменные он может анализировать - есть там интересующий нас сайт, или же нет.. Кроме того, он может и перенести какую-то информацию в буфер обмена (токлип), но в моем коде эта функция не использовалась. А потому он копирует в блокнот именно то, что скопировал. А почему он копирует лишь часть строки - это уже вам надо думать. Еще разок предлагаю попробовать в ненастоящих условиях - откройте несколько вкладок гугл с разными поисковыми запросами и пару случайных сайтов с другим доменом. Проверьте координаты кликов и скопируйте гугл-запросы в блокнот.

> В общем, спасибо Вам огромное!!!)
2) Я хотел бы сам поразбираться в коде. И ваше время неудобно забирать)
Пожалуйста)
Но ведь уже поздно "не забирать время" - оно уже было потрачено на тот скрипт, и проверку его работоспособности с вариантом блокнота. И с тем, что вам не интересно почитать и понять, как он устроен (ведь комментарии я явно не для себя пишу), чтобы уже потом делать по аналогии свой - видимо, потрачено зря((


> Я сам сейчас составлю небольшой код) Но я не умею делать так, чтобы он только 1 круг сделал)

В комментариях отдельно описан момент, каким образом можно останавливаться после одного круга. Возможно есть и другие варианты, но надо сперва продумать логику остановки, а уж после пытаться выбирать и реализовать другой вариант.

А именно:
Code: (clickermann) [Select]
   If($str1=0)                 // запоминание адреса первой проверяемой страницы
      $str1=$str
   Else
      If($str1=$str)          // если снова адрес совпадет с первым, значит прошли полный круг, и надо закрыть программу
         Print("All done")
         halt         // завершение работы скрипта
      End_if
   End_if
« Last Edit: December 09, 2018, 02:52:18 PM by Qwerry »