1

Тема: AHK: Пересылка сообщений в почте

Появилась необходимость пересылать полученные сообщения на другой почт. ящик,притом обязательно поштучно.
Ящик, с которого должна осуществляться пересылка mail.ru.
Попытался набросать скрипт - уперся в одну проблему.

F1::
Loop {
Send {vk46} ; посылаю нажатие F - открывается окно пересылки сообщения
Sleep,900
Send ^{vk56} ; курсор уже стоит в адресной строке - вставляю сохраненный заранее адрес(он всегда один)
Sleep,100
Send {enter} ; подтверждаю адрес
Send ^{enter} ; отправляю письмо
Sleep,300
Send {vk09 25} ; здесь пытаюсь выбрать блок "вернуться к исходному письму" при помощи кнопки TAB
Sleep,100
Send {enter} ; перехожу к исходному письму
Sleep,300
Send ^{up} ; перехожу к следующему письму
}
Return

Все стопорится на этапе выбора блока "вернуться к исходному письму". Сколько раз я ни пытался посчитать число нажатий кнопки TAB - оно всегда разное.
Пытался заменить этот этап на двойное нажатие кнопки BACKSPACE, чтобы вернуться на момент пересылки письма, и затем к исходнику,все равно не выходит. Возвращается только на момент пересылки,даже когда нажимаю руками.
Была идея открывать окно пересылки письма в новой вкладке,а затем закрывать его,после того,как письмо отправлено, и возвращаться на предыдущую вкладку, со списком входящих,но не знаю,как реализовать это в коде. Пользуюсь Google Chrome.

2

Re: AHK: Пересылка сообщений в почте

Попробуй использовать команду "cick".

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3 (изменено: stealzy, 2014-11-21 00:49:53)

Re: AHK: Пересылка сообщений в почте

Для автоматизации Web есть свои инструменты. Вот если бы у вас стоял почтовый клиент, другое дело.
Можно конечно использовать команду click, если координаты кнопки постоянны, или найти кнопку по ее картинке.

4

Re: AHK: Пересылка сообщений в почте

Как можно найти координаты кнопки?

5

Re: AHK: Пересылка сообщений в почте

Все,разобрался сам

F1::
MouseGetPos, xpos, ypos 
clipboard = %xpos%, %ypos%
return

Cначала писал запуск блокнота и отправку туда координат, потом сообразил - зачем это мне ради всего 1 пары координат. Отправил сразу в буфер.

Попробуй использовать команду "cick".

Ох как долго я искал таинственную команду "cick" .Сломал глаза и голову перелопачивая интернет в поисках именно cick а не kick ...

Спасибо stealzy за подсказку)

6 (изменено: Alectric, 2014-11-21 20:29:53)

Re: AHK: Пересылка сообщений в почте

OFF:

Deluxe пишет:

Ох как долго я искал таинственную команду "cick".Сломал глаза и голову перелопачивая интернет в поисках именно cick а не click ...

Да извиняюсь, очепятка.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

7

Re: AHK: Пересылка сообщений в почте

Alectric пишет:

Да извиняюсь, очепятка.

Да ничего страшного

именно cick а не click ...

Нет, именно kick - автозамена замучила предлагать свои варианты

8

Re: AHK: Пересылка сообщений в почте

С кодом творится какая то ерунда. Отправлю весь код,благо он небольшой, т.к. не совсем уверен,что знаю,где несостыковка.

F1::
loop  {
SendMode Input 
Send {vk46} ; нажатие F (гор. кл. "переслать")
Sleep,2000
Send ; некоторый почт. адрес.mail.ru
Sleep,2500
Send {enter} ; подтверждаем ввод
Sleep,100
Send ^{enter} ; отправляем письмо
Sleep,2500
ControlClick, Chrome_RenderWidgetHostHWND1, A ; кликаем кнопку "вернуться к исходному письму"
Sleep,2000
Send ^{up} ; переходим к следующему письму
Sleep,2000
}
Return

Во первых, задержку приходится периодически увеличивать,т.к. предыдущее действие не успевает выполняться,а следующее,например, отправляет переход в новое окно. Из-за этого пришлось увеличить её с 900 до 2000-2500 на разных этапах.
Что может влиять на задержку и как этого избежать, или уменьшить это воздействие?
И еще. Самое главное. Очевидно код нестабилен, но я понятие не имею,как и почему. Чуть ранее, я дал задачу повторить цикл 100 раз, т.е. переслать 100 писем. Из-за выставленных больших задержек время выполнения скрипта составило более 15 минут. Затем, сразу же по выполнению предыдущего задания, я решил выставить 60 повторений цикла. Первые 3-4 письма отправились,а на следующем вылезла ошибка - указан некорректный адрес получателя.
Оказывается, почему то код иногда дополнительно копирует последнюю букву адреса как отдельного получателя. Абсолютно неясно,почему.
Подобная ошибка возникает и когда выполняю код как единичную операцию. Из-за чего это может быть?

OFF
И с другими скриптами у меня возникают проблемы на ровном месте. Вот например,сейчас код работает, а через 5 минут вытворяет чёрте что. А спустя некоторое время вновь работает нормально.
Мистика?

9 (изменено: Alectric, 2014-11-22 21:05:52)

Re: AHK: Пересылка сообщений в почте

Chrome_RenderWidgetHostHWND1 - это не кнопка, у хрома не получится работать с контролами, только с кликам и поиском картинок или пикселей в определенных координатах.

Например так можно ждать появления нужного цвета между загрузками страниц:

#SingleInstance,force
CoordMode,tooltip,Screen
CoordMode,Pixel,Screen

x=40
y=60
color=0xffffff   ; белый цвет

again:

loop,500   ;  приблизительное время - сколько ждать появления цвета
{
  sleep,10    ;  для расчета времени - 10*500~5 секунд, можно сделать точнее с помощью A_TicCount
  a++
  if a>10
    a=0
  PixelGetColor,c,x,y+a     ; чтобы сканировать горизонтально "+a" подставь соответственно к "x"
tooltip,%c%,% x,% y+a+1      ; это можно закоментировать чтоб не мешалось
  found=0
  if (c=color)      ; если цвет совпал
  {
    found=1
    break
  }
}
tooltip
if found=1
{
  tooltip,found=%found% `nнашел,x,y
  sleep,3000
}
else
{
  tooltip,found=%found% `nнет,x,y
  sleep,3000
  goto,again
}
;  ---

goto,again
return

esc::
exitapp

Пару минут спустя:
Вспомнил про эту тему.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

10

Re: AHK: Пересылка сообщений в почте

Alectric пишет:

Chrome_RenderWidgetHostHWND1 - это не кнопка, у хрома не получится работать с контролами, только с кликам и поиском картинок или пикселей в определенных координатах.

На самом деле с этим то у меня проблем нет,точнее уже решена ранее. Как только мне написали про click я сразу воспользовался этой командой. Просто потом, когда пытался решить недоразумение с отправкой почт. адреса, я совершал различные манипуляции с контролами,чтобы изменить их текстовое содержимое. Ну и попробовал ControlClick заодно,вместо Click. На данный момент использую последнее.

Click, 667, 230

Кстати,

Deluxe пишет:

...Оказывается, почему то код иногда дополнительно копирует последнюю букву адреса как отдельного получателя. Абсолютно неясно,почему...

- эта проблема все еще актуальна. Именно она для меня на первом плане в данный момент. Все еще не знаю, в чем дело, и тем более, как это исправить.
А насчет этого

Например так можно ждать появления нужного цвета между загрузками страниц:

Длинный и непонятный для меня код.

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

11

Re: AHK: Пересылка сообщений в почте

Я бы копал в сторону:

ComObjCreate("InternetExplorer.Application")

12 (изменено: Alectric, 2014-11-22 16:27:35)

Re: AHK: Пересылка сообщений в почте

Deluxe пишет:
Длинный и непонятный для меня код.

Я думал ты найдешь объяснение непонятных тебе команд в справке...
OFF: Думаю нужно немного отдохнуть от программирования, если понимание пропадает.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

13

Re: AHK: Пересылка сообщений в почте

Alectric пишет:

Я думал ты найдешь объяснение непонятных тебе команд в справке...
OFF: Думаю нужно немного отдохнуть от программирования, если понимание пропадает.

Понимаю, тяжело объяснять человеку что то, который не понимает практически ничего в том,что ему объясняют.

Но ведь еще со школы было так - пропустил какой то урок и все, следующая тема тебе уже непонятна.
Так и тут. Ты в прошлый раз отправил пару команд - я их нашел в справке,разобрал примеры, научился применять.
А тут сразу целый код, с незнакомыми командами. (Кстати, я все таки не нашел в справке упоминания "CoordMode", а "PixelGetColor" есть только в списке команд, и там только описание команды без принципа действия и примеров.)
Наверное, беда в том, что я в жизни с программированием не имел ничего общего, и только дня 4 назад впервые столкнулся с этим. Ну и все таки,наверняка, глаз замылился, за эти 4 дня, без перерыва, с непривычки.

OFF: Кстати, проблему с некорректным вводом почт. адреса удалось решить заменой всех команд Send,посылающих нажатия гор.клавиш, на Click

14 (изменено: Alectric, 2014-11-22 21:07:08)

Re: AHK: Пересылка сообщений в почте

Перевод есть не для всех команд, описание всех команд есть в оригинальной справке. Если не поймешь на английском, то объясню.

Если коротко:
Coordmode - задает режим измерения координат для указанной команды (tooltip и др.), т.е. какую точку команда будет считать нулем (левый верхний угол экрана или активного окна)
PixselGetColor - дословно: взять цвет пикселя, задается переменная для сохранения и координаты.

А тут сразу целый код, с незнакомыми командами.

Поверь мне, это еще понятные команды.

Наверное, беда в том, что я в жизни с программированием не имел ничего общего, и только дня 4 назад впервые столкнулся с этим.

Жизнь полна неожиданностей (жил спокойно и жил, и тут вдруг раз - стал программистом).

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

15

Re: AHK: Пересылка сообщений в почте

Deluxe, поизучайте тут:
http://forum.script-coding.com/viewtopic.php?id=9108

16

Re: AHK: Пересылка сообщений в почте

Перевод есть.

17

Re: AHK: Пересылка сообщений в почте

Alectric пишет:

Перевод есть не для всех команд, описание всех команд есть в оригинальной справке. Если не поймешь на английском, то объясню.

Для таких,как ты, в раю забронировано место. С джакузи и всем остальным

Alectric пишет:

Поверь мне, это еще понятные команды.


Как говорил один умный дядька - "Все в мире относительно". Так и для меня это относительно сложно.

Alectric пишет:

Жизнь полна неожиданностей (жил спокойно и жил, и тут вдруг раз - стал программистом).

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

Malcev пишет:

Deluxe, поизучайте тут:
http://forum.script-coding.com/viewtopic.php?id=9108

Посмотрел. С Сендами и табами ничего сложного нет) А вот остальное...кхм
Схороню, и буду постепенно разбираться!
Спасибо!

ypppu пишет:

Перевод есть.

Что бы я без вас делал! Спасибо.
На будущее, чтобы ни вас, ни кого либо еще напрасно не тревожить - где искать русскоязычные туториалы, если не нашел в справке?

18 (изменено: Malcev, 2014-11-23 10:39:53)

Re: AHK: Пересылка сообщений в почте

Названия элементов можно получить с помощью утилиты AhkSpy с нашего форума.

ComObjError(false)
oIE := ComObjCreate("InternetExplorer.Application")
oIE.visible := True, oIEHWND := oIE.HWND
WinMaximize ahk_id %oIEHWND%
oIE.navigate("https://e.mail.ru/message/14167157880000000143/")   
While oIE.readyState != 4 || oIE.document.readyState != "complete" || oIE.busy  
   Sleep, 20
Send:
oIE.document.querySelector("i[class=""ico ico_toolbar ico_toolbar_forward""]").click()
loop
{
   RegexMatch(oIE.document.documentElement.InnerText, "<br>-------- Пересылаемое сообщение --------<br>[\s\S]+?Тема: ", match)
   if (match != "") and (match != matchPrev)
      break
}
oIE.document.querySelector("input[class=""js-input compose__labels__input""]").value := "blablabla@blablabla.com"
oIE.document.querySelector("div[class=""b-toolbar__btn b-toolbar__btn_false js-shortcut""]").click()
While !InStr(oIE.document.documentElement.InnerText, " Письмо отправлено -")
   Sleep, 20
loop
{
   if (oIE.document.querySelectorAll("a[class=""message-sent__title__link""]")[A_Index-1].InnerHtml = "Вернуться к исходному письму")
   {
      oIE.document.querySelectorAll("a[class=""message-sent__title__link""]")[A_Index-1].click()
      break
   }
}
While !oIE.document.querySelector("i[class=""ico ico_toolbar ico_toolbar_arrow ico_toolbar_arrow_up""]")
   Sleep, 20
if oIE.document.querySelector("div[class=""b-toolbar__btn b-toolbar__btn_disabled b-toolbar__btn_grouped b-toolbar__btn_grouped_first js-shortcut""]")
{
   msgbox, done
   ExitApp
}
doc := oIE.document.documentElement.InnerText
oIE.document.querySelector("i[class=""ico ico_toolbar ico_toolbar_arrow ico_toolbar_arrow_up""]").click()
While (doc = oIE.document.documentElement.InnerText)
   Sleep, 20
RegexMatch(oIE.document.documentElement.InnerText, "<br>-------- Пересылаемое сообщение --------<br>[\s\S]+?Тема: ", matchPrev)
GoTo, Send

19 (изменено: stealzy, 2014-11-24 13:35:03)

Re: AHK: Пересылка сообщений в почте

+ Offtop

Городить огород с COM, на языке автоматизации десктоп-программ, чтобы просто переслать 100 писем — это  пять!
http://animatika.ru/netcat_files/userfiles/3/facepalm.jpg

20

Re: AHK: Пересылка сообщений в почте

А что если... mail.ru позволяет работать с почтой через почтовый клиент?

21

Re: AHK: Пересылка сообщений в почте

Городить огород с COM, на языке автоматизации десктоп-программ, чтобы просто переслать 100 писем — это  пять!

Фоточки вставлять - ума много не надо.
Напишите без огорода.

22

Re: AHK: Пересылка сообщений в почте

ypppu пишет:

А что если... mail.ru позволяет работать с почтой через почтовый клиент?

Да, позволяет... Только когда мой клиент получил письма, они исчезли с web-интерфейса. Осторожно!

23

Re: AHK: Пересылка сообщений в почте

ypppu пишет:
ypppu пишет:

А что если... mail.ru позволяет работать с почтой через почтовый клиент?

Да, позволяет... Только когда мой клиент получил письма, они исчезли с web-интерфейса. Осторожно!

Страшновато. Уж лучше я по старинке буду. Ошибки можно исправить, а вот утерю писем - сложновато.
Даже если их потом получится найти - все равно проблем добавится, а я и так тут всех вопросами завалил

Кстати, можете что нибудь добавить к ...?

На будущее, чтобы ни вас, ни кого либо еще напрасно не тревожить - где искать русскоязычные туториалы, если не нашел в справке?

24

Re: AHK: Пересылка сообщений в почте

Я раньше предлагал - если один разработчик переведёт в год хотя бы один пункт документации, уже бы давно перевели наиболее востребованные команды. Но как-то глухо. Что уж говорить про другие русскоязычные ресурсы, скорее всего они перевод у нас копируют.

25

Re: AHK: Пересылка сообщений в почте

Страшновато. Уж лучше я по старинке буду

А чего не хотите попробовать мой вариант через com?

26

Re: AHK: Пересылка сообщений в почте

OFF:

ypppu пишет:

Я раньше предлагал - если один разработчик переведёт в год хотя бы один пункт документации, уже бы давно перевели наиболее востребованные команды. Но как-то глухо. Что уж говорить про другие русскоязычные ресурсы, скорее всего они перевод у нас копируют.

А есть где-нибудь список команд, которые еще не переведены? Чтобы не переводить те для которых перевод уже есть.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

27

Re: AHK: Пересылка сообщений в почте

В той же теме четырьмя сообщениями ниже я давал две ссылки.

28

Re: AHK: Пересылка сообщений в почте

Malcev пишет:

А чего не хотите попробовать мой вариант через com?

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

29 (изменено: Malcev, 2014-11-24 18:10:32)

Re: AHK: Пересылка сообщений в почте

Там надо только заменить на ссылку вашего самого первого письма, которое надо переслать.
oIE.navigate("https://e.mail.ru/message/14167157880000000143/")

И тут вставить адрес на который пересылать:
oIE.document.querySelector("input[class=""js-input compose__labels__input""]").value := "blablabla@blablabla.com"

И в IE должен быть сохранен ваш логин и пароль.
То есть чтобы скрипт при открытии этого письма выходил на это письмо, а не на страницу о вводе логина и пароля.

30

Re: AHK: Пересылка сообщений в почте

Здорово!! Спасибо большое!Работает намного быстрее моего)
Такой вопрос - он будет пересылать до посинения, пока письма не закончатся, а потом остановится? Или где то можно указать кол-во писем,которые я хочу переслать?

31

Re: AHK: Пересылка сообщений в почте

Пока письма не закончатся. Потом остановится.
В этом варианте можно менять количество циклов - loop 40

ComObjError(false)
oIE := ComObjCreate("InternetExplorer.Application")
oIE.visible := True, oIEHWND := oIE.HWND
WinMaximize ahk_id %oIEHWND%
oIE.navigate("https://e.mail.ru/message/14167157880000000143/")   
While oIE.readyState != 4 || oIE.document.readyState != "complete" || oIE.busy  
   Sleep, 20
loop 40
{
oIE.document.querySelector("i[class=""ico ico_toolbar ico_toolbar_forward""]").click()
loop
{
   RegexMatch(oIE.document.documentElement.InnerText, "<br>-------- Пересылаемое сообщение --------<br>[\s\S]+?Тема: ", match)
   if (match != "") and (match != matchPrev)
      break
}
oIE.document.querySelector("input[class=""js-input compose__labels__input""]").value := "blablabla@blablabla.com"
oIE.document.querySelector("div[class=""b-toolbar__btn b-toolbar__btn_false js-shortcut""]").click()
While !InStr(oIE.document.documentElement.InnerText, " Письмо отправлено -")
   Sleep, 20
loop
{
   if (oIE.document.querySelectorAll("a[class=""message-sent__title__link""]")[A_Index-1].InnerHtml = "Вернуться к исходному письму")
   {
      oIE.document.querySelectorAll("a[class=""message-sent__title__link""]")[A_Index-1].click()
      break
   }
}
While !oIE.document.querySelector("i[class=""ico ico_toolbar ico_toolbar_arrow ico_toolbar_arrow_up""]")
   Sleep, 20
if oIE.document.querySelector("div[class=""b-toolbar__btn b-toolbar__btn_disabled b-toolbar__btn_grouped b-toolbar__btn_grouped_first js-shortcut""]")
   break
doc := oIE.document.documentElement.InnerText
oIE.document.querySelector("i[class=""ico ico_toolbar ico_toolbar_arrow ico_toolbar_arrow_up""]").click()
While (doc = oIE.document.documentElement.InnerText)
   Sleep, 20
RegexMatch(oIE.document.documentElement.InnerText, "<br>-------- Пересылаемое сообщение --------<br>[\s\S]+?Тема: ", matchPrev)
}
msgbox, done
ExitApp

32

Re: AHK: Пересылка сообщений в почте

Благодарю!

33

Re: AHK: Пересылка сообщений в почте

Malcev пишет:

Пока письма не закончатся. Потом остановится.
В этом варианте можно менять количество циклов - loop 40

ComObjError(false)
oIE := ComObjCreate("InternetExplorer.Application")
oIE.visible := True, oIEHWND := oIE.HWND
WinMaximize ahk_id %oIEHWND%
oIE.navigate("https://e.mail.ru/message/14167157880000000143/")   
While oIE.readyState != 4 || oIE.document.readyState != "complete" || oIE.busy  
   Sleep, 20
loop 40
{
oIE.document.querySelector("i[class=""ico ico_toolbar ico_toolbar_forward""]").click()
loop
{
   RegexMatch(oIE.document.documentElement.InnerText, "<br>-------- Пересылаемое сообщение --------<br>[\s\S]+?Тема: ", match)
   if (match != "") and (match != matchPrev)
      break
}
oIE.document.querySelector("input[class=""js-input compose__labels__input""]").value := "blablabla@blablabla.com"
oIE.document.querySelector("div[class=""b-toolbar__btn b-toolbar__btn_false js-shortcut""]").click()
While !InStr(oIE.document.documentElement.InnerText, " Письмо отправлено -")
   Sleep, 20
loop
{
   if (oIE.document.querySelectorAll("a[class=""message-sent__title__link""]")[A_Index-1].InnerHtml = "Вернуться к исходному письму")
   {
      oIE.document.querySelectorAll("a[class=""message-sent__title__link""]")[A_Index-1].click()
      break
   }
}
While !oIE.document.querySelector("i[class=""ico ico_toolbar ico_toolbar_arrow ico_toolbar_arrow_up""]")
   Sleep, 20
if oIE.document.querySelector("div[class=""b-toolbar__btn b-toolbar__btn_disabled b-toolbar__btn_grouped b-toolbar__btn_grouped_first js-shortcut""]")
   break
doc := oIE.document.documentElement.InnerText
oIE.document.querySelector("i[class=""ico ico_toolbar ico_toolbar_arrow ico_toolbar_arrow_up""]").click()
While (doc = oIE.document.documentElement.InnerText)
   Sleep, 20
RegexMatch(oIE.document.documentElement.InnerText, "<br>-------- Пересылаемое сообщение --------<br>[\s\S]+?Тема: ", matchPrev)
}
msgbox, done
ExitApp

Появилась ошибка. Не заполняет адресную строку, а отправку письма посылает.
Что не так?

34

Re: AHK: Пересылка сообщений в почте

Видно мейл.ру поменяли чуток сайт.
Замените это:

oIE.document.querySelector("input[class=""js-input compose__labels__input""]").value := "blablabla@blablabla.com"

на это:

oIE.document.querySelector("TEXTAREA[class=""js-input compose__labels__input""]").value := "blablabla@blablabla.com"

Советую таки поизучать, чтобы понять логику скрипта и в будущем самому изменять параметры.
http://forum.script-coding.com/viewtopic.php?id=9108

35

Re: AHK: Пересылка сообщений в почте

Malcev пишет:

Советую таки поизучать, чтобы понять логику скрипта и в будущем самому изменять параметры.
http://forum.script-coding.com/viewtopic.php?id=9108

Всецело одобряю , как будет свободное от работы время ,обязательно постараюсь вникнуть, а пока большое спасибо!