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

  • 30.09.2019
  • 4 942
  • 11
  • 28.11.2019
  • 1
  • 1
  • 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. Надеюсь, что документации к ним, и двух примеров выше, будет достаточно, чтобы понять как их использовать с другими поддерживаемыми браузерами.

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

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

    • Ярослав

    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 нужных полей для заполнения.

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

Ваш адрес email не будет опубликован.

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