1 (изменено: art, 2014-01-04 12:06:12)

Тема: AHK: Заполнение формы на веб-сайте

Здравствуйте, уважаемые участники форума!

Подскажите пожалуйста как оптимально реализовать заполнение формы на сайте? В частности непонятны моменты:

1. Как научить программу вставлять информацию из файла?
2. Как указать какую информацию в какое поле вставить? На ум приходят только Tab .
3. Как работать с выпадающими меню, чекбоксами и т.п?

http://htmlbook.ru/files/images/practical/24.png

2

Re: AHK: Заполнение формы на веб-сайте

Это настолько нетривиальная задача?

3

Re: AHK: Заполнение формы на веб-сайте

Для Ивана Копылова, видимо, нетривиальная, раз ему скрипт для этого нужен.

4

Re: AHK: Заполнение формы на веб-сайте

Можно потренироваться для начала с командой Send и её разновидностями.

5 (изменено: BashkaMen, 2014-01-07 16:47:43)

Re: AHK: Заполнение формы на веб-сайте

Пробуй так:

F2::
sendinput, Иван{Tab}
sendinput, Копылов{Tab}
sendinput, Красн{Tab}
sendinput, ivan@kopylov.ru{Tab}
sendinput, pass
sendinput, pass
return

Последнее не получиться, потому что там рандомная картинка!
Если скрипт не работает знадчит комп не  успевает, тогда сделай так:

F2::
sendinput, Иван{Tab}
sleep 100
sendinput, Копылов{Tab}
sleep 100
sendinput, Красн{Tab}
sleep 100
sendinput, ivan@kopylov.ru{Tab}
sleep 100
sendinput, pass
sleep 100
sendinput, pass
return


Итого: Всё введется за 500 миллисекунд.

6

Re: AHK: Заполнение формы на веб-сайте

YMP пишет:

Для Ивана Копылова, видимо, нетривиальная, раз ему скрипт для этого нужен.

Хаха, смешно

Я тоже смотрел в сторону сенда и табов, спасибо за ответы!

7 (изменено: Mikki, 2014-01-08 14:03:59)

Re: AHK: Заполнение формы на веб-сайте

Автохоткей не умеет распознавать элементы на вэб страничках.

Если надо работать с интернет страничками то советую посмотреть в сторону питоновскиго модуля Selenium. Чудо как хорош 

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

8

Re: AHK: Заполнение формы на веб-сайте

Сумеет, если пользовать Automation посредством IE.

9

Re: AHK: Заполнение формы на веб-сайте

Mikki пишет:

Если надо работать с интернет страничками то советую посмотреть в сторону питоновскиго модуля Selenium. Чудо как хорош 

Давно пора на форуме создать подраздел посвященный средствам автоматизации и написанию скриптов в веб-браузерах

10 (изменено: serzh82saratov, 2014-04-21 19:16:43)

Re: AHK: Заполнение формы на веб-сайте

Для наглядности, так:


oIE := ComObjCreate("InternetExplorer.Application") 
oIE.navigate("https://www.avito.ru/registration")   
oIE.visible := True, oIEHWND := oIE.HWND 
WinMaximize ahk_id %oIEHWND%  
While, oIE.busy
    Sleep, 20  
Input:
    MsgBox Заполнить
    oDoc := oIE.document
    oDoc.querySelector("#name").value := "name"
    oDoc.querySelector("#email").value := "@email"    
    oDoc.querySelector("#phone").value := "557454554645"   
    oDoc.querySelector("#password").value := "*****************"   
    oDoc.querySelector("#confirm").value := "*****************"    
    oDoc.querySelector("#captcha").value := "не вижу"   
    oDoc.querySelector("#subscribe").checked := 0
    oDoc.querySelector("#comp").checked := 1
    MsgBox Зарегистрироваться 
    oDoc.querySelector("button[class=""btn btn-green""]").click() 
    While, oIE.busy
        Sleep, 20   
    If (oDoc.querySelector("#captcha_image").src != "")
    {
        MsgBox Не правильно! Повторить
        GoTo Input
    } 
    oIE := "", oDoc := ""
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

11

Re: AHK: Заполнение формы на веб-сайте

А как быть с положительным/отрицательным ответом сервера?
Например, после успешной регистрации, появляется следующий класс:

<div class=" alert alert-info " id="static">
                        <span class="glyphicon glyphicon-info-sign">&nbsp;</span>
                Account created, please login
      </div>

А при неуспешной

                <div class=" alert alert-danger " id="static">
                        <span class="glyphicon glyphicon-remove-circle">&nbsp;</span>
                Unable to create account: E-mail do not match
      </div>

12 (изменено: serzh82saratov, 2014-04-21 23:32:26)

Re: AHK: Заполнение формы на веб-сайте

Может вопрос не понял. На каждом сайте по своему, если это не устраивает:

    If (oDoc.querySelector("#captcha_image").src != "")

значит проверяйте что знаете, я про avito не загонялся. Я собственно до успешной регистрации и не доходил.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

13 (изменено: Malcev, 2014-04-21 23:38:14)

Re: AHK: Заполнение формы на веб-сайте

Я имею в виду, какой коммандой можно получить ответ от сайта об успешной регистрации?
Или все загонять в клипбоард и парсить?
Например данный сайт при неправильном имейл адресе выдает следующий ответ:

<div class="form-error">
  Введите корректный адрес электронной почты  </div>

Как его засунуть в автохотки для дальнейших действий?

14

Re: AHK: Заполнение формы на веб-сайте

Или все загонять в клипбоард и парсить?

Я Вас не пойму. Я конечно компетентного ответа никак не могу дать, но в примере идёт клик по кнопке - ожидание загрузки страницы - проверка есть ли капча.

    While, oIE.busy
        Sleep, 20   
    If (oDoc.querySelector("#captcha_image").src != "")

Знаю что это всё через **пу, но в силу моего дремучего дилетантизма, лучшего предложить не могу увы. Но клипбоард и парсинг - лучше? Объясните.

Например, после успешной регистрации, появляется следующий класс:

Или вам просто по аналогии не очевидно, что после загрузки после клика вы можете проверять значение чего сочтёте нужным.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

15

Re: AHK: Заполнение формы на веб-сайте

<div class="form-error">
  Введите корректный адрес электронной почты  </div>

Ну думаю сначало проверить основной признаки не удачи, ну а потом хоть парсить хтмл, хоть проверять все заранее известные элементы, тут дело ваше.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

16 (изменено: Malcev, 2014-04-22 00:04:54)

Re: AHK: Заполнение формы на веб-сайте

Ну а можете привести пример, как в msgbox получить "Введите корректный адрес электронной почты" из этого появившегося кода без использования клипбоарда?

<div class="form-error">
  Введите корректный адрес электронной почты  </div>

То есть если появился класс form-error со значением "Введите корректный адрес электронной почты", то делаем то-то.

17

Re: AHK: Заполнение формы на веб-сайте

Не понял.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

18

Re: AHK: Заполнение формы на веб-сайте

Подправил.

19 (изменено: serzh82saratov, 2014-04-22 01:13:23)

Re: AHK: Заполнение формы на веб-сайте

Ну тут додумаете.


oIE := ComObjCreate("InternetExplorer.Application") 
oIE.navigate("https://www.avito.ru/registration")   
oIE.visible := True, oIEHWND := oIE.HWND 
WinMaximize ahk_id %oIEHWND%  
While, oIE.busy
    Sleep, 20    
oDoc := oIE.document 
oDoc.querySelector("#email").value := "@email"    
oDoc.querySelector("button[class=""btn btn-green""]").click() 
While, oIE.busy
    Sleep, 20    
Sleep, 120
oDoc := oIE.document 
If (oDoc.all[87].innertext = "Введите корректный адрес электронной почты ")
    MsgBox Введите корректный адрес электронной почты
Else
    MsgBox С почтой всё ок
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

20

Re: AHK: Заполнение формы на веб-сайте

Хотя почему то не всегда работает.
Тут лучше парсить, но клипбоард то причём?


oIE := ComObjCreate("InternetExplorer.Application") 
oIE.navigate("https://www.avito.ru/registration")   
oIE.visible := True, oIEHWND := oIE.HWND 
WinMaximize ahk_id %oIEHWND%  
While, oIE.busy
    Sleep, 20    
oDoc := oIE.document 
oDoc.querySelector("#email").value := "@email"    
oDoc.querySelector("button[class=""btn btn-green""]").click() 
While, oIE.busy
    Sleep, 20    
MsgBox %  oDoc.querySelector("form").innerHTML
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

21 (изменено: Malcev, 2014-04-22 01:26:34)

Re: AHK: Заполнение формы на веб-сайте

У меня срабатывает.
Надо просто задержку увеличить перед проверкой innertext
А почему вы указали длину 87?
Как вы ее обнаружили?

If (oDoc.all[87].innertext

И как быть если сайт вообще не загрузился?
Данный скрипт не смотря на это показывает, что все ОК.

22

Re: AHK: Заполнение формы на веб-сайте

А почему вы указали длину 87?
Как вы ее обнаружили?

Это индес элемента в коллекции, я не сторонник его указывать, но по имени указать не получилось. iWB2 Learner выдал 88 но не работало. Потому сам искал, но сам не пойму почему 87???  Я сначала смотрел этим:


Loop
    if instr(oIE.document.body.all[A_Index].innertext, "Введите корректный адрес электронной почты" ) 
        all .= A_Index "`n"
MsgBox %  all

Но тут не правильный отсчёт, надо с нуля. Сейчас 87 вообще всегда пусто. sergeiplugatyr как то писал код, я себе так переделал:


all := [], i := 0
elements := oIE.document.body.all
Loop % elements.length 
        all[A_Index] := "Порядковый номер: " elements[A_Index-1].sourceIndex 
        . "`nЭлемент: "elements[A_Index-1].InnerText 
        . "`nЕго класс: " elements[A_Index-1].ClassName 
        . "`nЕго ID: " elements[A_Index-1].ID 
MsgBox % "Длинна колекции: " elements.length    
        . "`nДлинна массива: " all.maxindex()
1::ToolTip % all[--i] "`n`nв массиве" i
2::ToolTip % all[++i] "`n`nв массиве" i

В надежде что iWB2 Learner ошибается, но нет.

И как быть если сайт вообще не загрузился?

Ну после 

While, oIE.busy
    Sleep, 20

Что нибудь проверять. Кашерного ответа у меня нет.

Данный скрипт не смотря на это показывает, что все ОК.

Это не скрипт, это догадки. У меня по сабжу вопросов не меньше чем у Вас.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

23

Re: AHK: Заполнение формы на веб-сайте

Пока ничего лучше, чем использовать поиск ближайшего слова находящегося к первому полю введения, потом посыл {esc}{tab}, ввод информации и получение ошибок через парсинг клипбоарда в цикле - ничего лучше не вижу.
Типа:

loop
{
   send, ^{vk41}^{vk43}   ; ctrl+a ctrl+c
   If InStr(Clipboard, RegOk1) or InStr(Clipboard, RegNotOk1)
      break
   sleep, 100
}

Где RegOk1, RegNotOk1 - возможные варианты ответа сервера.
Через IE так и не удалось получить вразумительного ответа от сервера, так как вначале страница загружается полностью, а потом догружается ответ от сервера.
Писал так:

While oIE.readyState != 4 || oIE.document.readyState != "complete" || oIE.busy ; wait for the page to load
   Sleep, 10

24

Re: AHK: Заполнение формы на веб-сайте

Всё же не пойму, зачем клипбоард? Чем не устраивает:

MsgBox %  oDoc.querySelector("form").innerHTML

---

While oIE.readyState != 4 || oIE.document.readyState != "complete" || oIE.busy ; wait for the page to load
   Sleep, 10

Да, правильно. Это я тут что то упростил.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

25

Re: AHK: Заполнение формы на веб-сайте

Потому что на некоторых сайтах таким образом я не могу получить ответ от сервера.
Например здесь вбейте любой логин и пароль и попробуйте получить

Unable to login: Invalid username or password.

У меня не получилось.
http://isr.coins4everyone.com/index.php?page=login