Автоматический ввод логина и пароля на сайте

  • 30.09.2019
  • 18 581
  • 18
  • 24.11.2021
  • 7
  • 7
  • 0
Автоматический ввод логина и пароля на сайте

На своей основной работе довольно часто приходилось сталкиваться с таким явлением, как необходимость автоматического ввода и пароля на каком-либо сайте, причем через конкретный браузер (чаще всего - Internet Explorer), причем на этом сайте категорически отказывает сохранять логин и пароль. К счастью, с помощью инструментов Selenium и скриптового языка PowerShell можно значительно упростить жизнь себе и другим людям.

Автоматизация ввода логина и пароля на примере Internet Explorer

В данной статье будет автоматизирована следующая последовательность действий (которая не будет требовать никакого участия пользователя):

  • Автоматизированный заход на нужный сайт через определенный браузер;
  • Ввод имени пользователя и пароля;
  • Нажатие заданной кнопки входа (авторизации).

Сейчас будет рассмотрен вариант с использованием Internet Explorer, далее будет описана адаптация под другие браузеры.

  1. Сперва нужно получить дистрибутив Selenium. Для этого нужно перейти на его официальный сайт - https://www.seleniumhq.org/download/, и в секции Selenium Client & WebDriver Language Bindings скачать последнюю версию под C#. На текущий момент актуальная стабильная версия 3.14.0, на её примере дальше и будет идти речь.
  2. Открываем скачанный архив любым архиватором, и пытаемся им же открыть файл Selenium.WebDriver.3.14.0.nupkg. Если же он не открывается, то дописываем к концу nupkg файла расширение .zip. Теперь этот файл можно открыть любым архиватором.
  3. Открываем, переходим в папку lib, а в ней в папку net35. Распаковываем файл "WebDriver.dll" в любое надежное для хранения место. Пусть это будет C:\Selenium.
  4. На все том же сайте, в загрузках, находим секцию The Internet Explorer Driver Server, и скачиваем 32-битный вариант Internet Explorer Driver Server. Единственный exe из архива следует поместить по тому же адресу, что и "WebDriver.dll" - в папку C:\Selenium.
  5. Открываем встроенный в Windows редактор PowerShell - PowerShell (ISE). Найти его можно через меню "Пуск", набрав его название в поиске.

    Запускаем программу, нажимаем кнопку "Создать", и вносим туда следующие строки:

    Add-Type -Path "C:\Selenium\WebDriver.dll"
    $env:PATH += ";C:\Selenium"
    $browser = New-Object OpenQA.Selenium.IE.InternetExplorerDriver
    
    $browser.Navigate().GoToURL("http://192.168.1.2")
    $InputUser = $browser.FindElementById("userName")
    $InputUser.clear();
    $InputUser.SendKeys("user123")
    $PasswordUser = $browser.FindElementById("pwd")
    $PasswordUser.clear();
    $PasswordUser.SendKeys("password123")
    $LoginButton = $browser.FindElementById("loginBtn")
    $LoginButton.Click()
    
    Stop-Process -Name "IEDriverServer" -Force
  6. Теперь внесем в него необходимые правки. Зеленым цветом отмечены:
    • http://192.168.1.2 - адрес сайта, который нужно открыть в Internet Explorer'e.
    • user123 - имя пользователя.
    • password123 - пароль

    Красным цветом обозначены идентификаторы элементов HTML, которые являются полями для ввода нужных текстовых значений (за исключением третьего):

    • userName - идентификатор поля ввода имени пользователя.
    • pwd - идентификатор поля ввода пароля.
    • loginBtn - идентификатор кнопки логина.

    Узнать идентификатор нужного поля можно с помощью клика на нём правой кнопки мыши и выбора, в зависимости от браузера, пункта просмотра кода элемента:

    • Internet Explorer - Проверить элемент.
    • Google Chrome - Просмотреть код
    • Mozilla Firefox - Исследовать элемент.

    По выбору нужного пункта откроется панель с содержимым HTML кода. Выглядеть этот код будет примерно так:

    <input type="text" class="logining-input" id="userName" onkeypress="CheckInfo()" maxlength="31" onclick="JavaScript:this.value=''" onfocus="this.select();" placeholder=""> 

    Соответственно, из всего этого нужно взять значение id, и использовать его в скрипте PowerShell. Сохраним данный скрипт в папке C:\Selenium, и назовем Browser.ps1.

  7. Теперь можно проверить работу написанного скрипта, с помощью клавиши F5, или зеленой кнопки на панели инструментов. Если все было сделано верно, произойдет следующее:
    1. Откроется браузер Internet Explorer;
    2. Введутся нужные логин, пароль;
    3. Нажмется кнопка входа.
  8. Если же этого не произошло, нужно определить на каком моменте перестал выполнятся скрипт, и проверить консоль PowerShell (ISE) на наличие ошибок.

  9. Для упрощения запуска скрипта, можно создать ярлык:
    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noLogo -ExecutionPolicy unrestricted -file "C:\Selenium\Browser.ps1"

Вариант для Google Chrome

Как и говорилось в начале статьи, после примера с Internet Explorer'ом, дальше будут рассмотрены варианты с другими браузерами. Логично начать с Google Chrome, который как-никак самый популярный браузер последнего десятилетия.

Принцип работы с Google Chrome ничем не отличается от взаимодействия с Internet Explorer - нужно скачать специальный "драйвер" под нужную версию Google Chrome. Взять его можно со следующей страницы: https://sites.google.com/a/chromium.org/chromedriver/downloads.

Внутри архива будет находится файл chromedriver.exe, который нужно распаковать в директорию C:\Selenium. Далее, меняем всего одну строчку (за номером 3) в скрипте:

$browser = New-Object "OpenQA.Selenium.Chrome.ChromeDriver"

И последнюю:

Stop-Process -Name "ChromeDriver" -Force

Другие браузеры

Конечно же, только Internet Explorer и Google Chrome возможности Selenium не ограничены - различными разработчиками созданы "драйвера" для самых разных браузеров, от Mozilla Firefox, до Safari. Надеюсь, что документации к ним, и двух примеров выше, будет достаточно, чтобы понять как их использовать с другими поддерживаемыми браузерами.

Была ли эта статья Вам полезна?

Комментарии к статье (18)

    • Владимир

    Здравствуйте, все работает, как сделать чтобы после срабатывания скрипта окно браузера закрывалось?

    • Денис

    Здравствуйте,
    подскажите пожалуйста, а как автоматизировать вход для браузера Microsoft edge? Не могли бы вы дополнить статью этой информацией на последних версиях Selenium.
    Спасибо.

      • Recluse

      По идее, вам нужно ориентироваться на имеющийся пример в статье, за исключением того, что нужно скачать вебдрайвер для Microsoft Edge. Найти вебдрайвер для нужной версии Microsoft Edge можно на официальном сайте Microsoft.

      Ну и в дальнейшем, вместо подключения вебдрайвера для IE, нужно подключить драйвер для Edge:

      $browser = New-Object "OpenQA.Selenium.Edge.EdgeDriver"

      И заменить последнюю строку:

      Stop-Process -Name "EdgeDriver" -Force
    • Денис

    Здравствуйте,
    не могли бы вы обновить статью под последние на данный момент версии 4.0. Так же интересно узнать можно ли автоматизировать вход для браузера Microsoft Edge 41.16299.666.0.
    Спасибо.

      • Recluse

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

    • Dmitriy

    Здравствуйте, после авторизации сделать двойной клик по нужному элементу?

      • Recluse

      Попробуйте (проверить нет возможности):

      $Element = $browser.FindElementById("АЙДИ ЭЛЕМЕНТА")
      $Element.doubleClick()
    • Ярослав

    Id указаны правильно, но ничего не происходит

      • Recluse

      Какой браузер? На конкретно каком шаге останавливается работа?

        • Ярослав

        Браузер Internet Explorer, как в примере. Останавливается на том что даже не вносит значения в поля Логина, Пароля.

          • Recluse

          Точно ID правильные? Можно увидеть кусок кода с веб-ресурса с этими полями, и код в PowerShell?

            • Ярослав

            https://ibb.co/qJY0fR4 часть кода где указан id.
            Сам скрипт https://ibb.co/K7QNHdS

              • Recluse

              Попробуйте добавить эту строчку:

              $InputUser.click();

              перед

              $InputUser.SendKeys("user123")

              И после этого, поменяется ли что-то с вводом пользователя в соответствующее поле?

              Так же попробуйте версию для Google Chrome - будет ли там такая же проблема?

              И было бы интересно узнать, что именно за страница с которой возникла проблема (какое-то сетевое устройство, локальный ресурс)?

                • Ярослав

                Через Chrome работает все хорошо, но просто есть задача сделать это через IE.
                Вход это на web морду видеорегистратора. Модель RVi-2NR64880

                  • Recluse

                  Если честно, то последнее, что мне хочется предложить - проверить версию IE, поскольку мои варианты на этом иссякают.

                  Сам использую описанный в статье метод с видеорегистратором Ginzu, работает как часы из под Win 7 и Win 10. В обоих случаях версии IE 11.

                • Ярослав

                При добавлении данного параметра $InputUser.click(); ничего не изменилось.

    • Александр

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

      • Recluse

      Скорее всего неверно указаны ID нужных полей для заполнения.

Добавить комментарий для Recluse

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

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.