Autoit. Взаимодействие с сайтом.

В предыдущей статье мы узнали, как находить нужное значение.

Здесь, рассмотрим, как взаимодействовать с сайтом, с помощью Autoit.

Задача следующая, ввести в поле поиска сайта coolcode.ru число 12 и нажать кнопку поиска.

У меня получился вот такой код:

Воспользуемся модулем:

В предыдущей статье у нас появилась переменная

Уже знакомыми командами открываем IE с сайтом coolcode.ru

Теперь ищем <div> с id «search»

 

После выполнения команды в переменной $oDiv Будет находится следующий элемент:

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

 

Найдём поле ввода

и кнопку

 

устанавливаем значение поля ввода такое же как и содержание переменной $Num

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

Это всё сделано, для того что бы это хоть как то было похоже на взаимодействие человека. Многие сайты не любят роботов, а особенно когда те с ними общаются.

 

И последнее нажимаем на кнопку

Тоже самое сначала фокус, потом задержка, потом нажимаем на кнопку.

И вуаля… сайт послушно ищет 12.

Комментарии:

Комментарии 19

  • Подскажите а как можно заполнить поля на сайте не отображая при этом саму страницу ?
    То есть, имеется скрипт на Autoit с некой формой для заполнения.
    Пользователь вводит данные в поля Edit и в конце нажимает кнопку отправить, скрипт должен эти данные вставить в поля на сайте и нажать кнопку отправить на том же сайте, но при этом пользователь не должен видеть саму страницу сайта.
    И ещё один момент, как скрипт может получить ответит с сайта всё ли прошло успешно или нет.
    За ранее спасибо!

    • >Подскажите а как можно заполнить поля на сайте не отображая при этом саму страницу ?
      Всё дело в функции:
      _IECreate(url,присоединится ли к существующему окну, отображать ли окно браузера, ожидать ли загрузки страницы, будет ли браузер в фокусе)
      Тоесть на моём примере строчку:
      Local $oIE = _IECreate(«http://www.coolcode.ru»,0,1,0,1)
      Надо изменить так:
      Local $oIE = _IECreate(«http://www.coolcode.ru»,0,0,0,1)
      И она не будет отображаться.

      >И ещё один момент, как скрипт может получить ответит с сайта всё ли прошло успешно или нет.
      Здесь надо смотреть, что происходит на сайте, меняется цвет кнопки или появляется надпись. В общем как вы определяете, что всё прошло успешно.
      Если же ничего на сайте не поменялось, то и определить не понятно как.

      У меня ещё статья с примерами по этому поводу есть, там пример более подходящий вам: Autoit. Парсинг сайта или забрать значение с сайта.

  • Спасибо за столь быстрый ответ.
    То есть для любого взаимодействия с сайтом необходимо производить через _IECreate (он как основа полагающее звено) ?

  • Странно на $oForm = _IEGetObjById($oIE1, ‘form1’) в консоли пишет
    —> IE.au3 T3.0-2 Error from function _IEGetObById, $_IESTATUS_InvalidObjectType

    • даже не знаю, что на это ответить… без контекста могу только сказать, что там написано…:) может в понедельник доберусь до компа с виндой и у меня получится повторить ошибку. Я бы внимательно посмотрел на $oIE1 скорее всего в нём ошибка

  • эээ… это первичная инициализация…
    то есть эта штука запускает эксплорер, или подключается к нему…
    а потом с ним взаимодействовать можно….
    Тоесть в моём примере мы получили $oIE
    Local $oIE = _IECreate(«http://www.coolcode.ru»,0,1,0,1)
    из него $oDiv а из него $oInput
    Но первично это $oIE что то типо ссылка на эксплорер…

  • Сделал Local $oIE1 = _IECreate($sUrl, 0, 0, 0, 1) и всё равно страница отображается ((( странно.

  • Большое спасибо за материал! Единственное вы ошиблись: Поиск
    А возможно искать элемент не по id, а допустим по классу или названию?

  • Прошу прощение за глупый вопрос, надо использовать _IEGetObjByName

  • Глупых вопросов не бывает, к тому же вы дали на него ответ. Так что большое спасибо.
    Не понял где я ошибся.

  • Добрый день.
    Разбираю ваш пример и так же сталкаваюсь с ошибками.
    —> IE.au3 T3.0-1 Error from function _IEGetObById, $_IESTATUS_InvalidObjectType
    —> IE.au3 T3.0-1 Error from function _IETagNameGetCollection, $_IESTATUS_InvalidDataType
    —> IE.au3 T3.0-1 Error from function _IEQuit, $_IESTATUS_InvalidObjectType

    Вот упрощеный код:

    Есть предположение, что ошибка может вызываться из-за версии ИЕ или AutoIT.
    Можно ли попросить вас прокомментировать.
    Заранее спасибо.

    • Добавлю:
      IE.au3 в C:\Program Files (x86)\AutoIt3\Include есть.
      Обновил его от сюда: https://www.autoitscript.com/forum/files/file/227-ieau3/ — проблема осталась.
      Больше идей нет =(

    • Здрауствуйте.
      Я так понимаю приведённые ошибки возникают при запуске моего скрипта, а не вашего примера?
      может быть не успевает загрузиться страница? попробуйте вместо задержки Sleep(2000) использовать
      Local $oIE = _IECreate(«http://www.coolcode.ru»,0,1,1,1), что бы страница загрузилась полностью.

      • Спасибо за оперативный ответ.
        Ошибки возникали в обоих случаях — своём примере выше я просто упростил ваш пример, чтобы локализовать проблему.
        Порылся на буржуйских сайтах — нашел решения:
        — данные ошибки могут возникать из-за довереных зон в ИЕ (это случай для интранетовских сайтов)
        — работе скрипта может мешать UAC (отключение говорят помогает)
        — AutoIt ScriptEditor должен быть запущен под правами администратора (мой случай)
        Как только я перезапустил едитор под правами админа — все заработало.
        Надеюсь эта информация будет полезной.
        Спасибо Вам за чудесные статьи, сайт и помощь — стану постоянным читателем и почитателем =)
        Хорошего Вам дня!

        • И вам спасибо за лестные отзывы. обязательно добавлю эту информацию в статью… только не в эту а в первую.

  • Здравствуйте, можно ли проделать подобное с браузером chrome, то есть заполнить форму и нажать на кнопку.

    • м…. конечно можно … но не этими средствами… можно посмотреть на Chromium Browser Automation.

      • Local $oButton=_IEGetObjById($oDiv, «searchsubmit») выдаёт ошибку (IE.au3 T3.0-0 Warning from function _IEGetObjByName, $_IEStatus_NoMatch) как правильно задать эту переменную? за ранее спасибо

        • Как ни странно, но у вас всё правильно! Я поменял движок… и теперь код в шапке не работает 🙁 Ещё надо всё от админа запускать… ну это на всякий случай.. 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *