Главная > Powershell > Авторизация на сайте через Powershell

Авторизация на сайте через Powershell

В качестве дополнительного интернета пользуюсь услугами PEOPLEnet (есть такой оператор 3G интернета в Украине). Для того, чтобы узнать состояние счёта нужно отправить sms на определённый номер, либо зайти в систему самообслуживания. Как первое, так и второе делать всегда лень, а за состоянием счёта следить нужно. В очередной раз пополняя счёт подумал, а нельзя-ли упростить процедуру определения состояния счёта, тем более, что ни номера, на который нужно слать sms, ни своего номера/пароля от системы самообслуживания я не помню, а браузерам хранить пароли я не доверяю. Так появилась идея написать скрипт, который сам будет заходить на сайт, коннектиться, проверять счёт, а мне будет только выводить результат.

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

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

Для того, чтобы войти в систему самообслуживания нужно заполнить следующую форму:

PEOPLENet - LoginForm

Исследуя код страницы можно увидеть, что форма для авторизации называется LoginForm, а поля для ввода номера и пароля X_Username и X_Password соответственно.

PEOPLENet - LoginForm (HTML)

Этого достаточно, чтобы начать писать скрипт.

Для начала вводим номер, пароль и адрес страницы:

$login = "number"
$password = "password"
$url = "http://my.people.net.ua"

Создаём объект InternetExplorer, загружаем страницу и ждём окончания загрузки:

$IE = New-Object -ComObject InternetExplorer.Application
$IE.Navigate($url)
While ($IE.Busy)
{ Start-Sleep -Milliseconds 100 }

Можно убедиться, что форма одна, и называется она LoginForm:

$IE.Document.forms | Select-Object name

Заполняем форму, нажимаем кнопку входа, и ждём пока загрузится:

$form = $IE.Document.forms.namedItem("LoginForm")

$form.item("X_Username").value = $login
$form.item("X_Password").value = $password
($form | Where-Object {$_.value -eq "Вхід"}).click()

While ($IE.Busy)
{ Start-Sleep -Milliseconds 100 }

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

PEOPLENet - Result

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

$text = $IE.Document.documentElement.innerText

# Закрываем IE
$IE.Quit()

# .+ - один, или несколько любых символов
$regex = [regex]'Стан рахунку:.+грн.'
$regex.Match($text) | Select-Object -ExpandProperty value

Результат:

PEOPLENet - Result (picture)

Что и требовалось.

  1. Artem
    10/02/2014 в 15:09

    Подскажите пожалуйста а как осуществить поиск вот в таком документе(Необходимо совершить туже операцию но без извлечения данных — просто залогинится): И пожалуйста посоветуйте какую то литературу пожалуйста

    • 10/02/2014 в 16:56

      Давайте по порядку…
      Я чего-то не понял…

      Artem :

      Подскажите пожалуйста а как осуществить поиск вот в таком документе

      В каком??

  2. Artem
    10/02/2014 в 15:10
  3. Artem
    10/02/2014 в 18:45
  4. Artem
    10/02/2014 в 18:46

    Теги не работают

  5. Artem
    10/02/2014 в 18:52

    У меня вот нет форм например если другие возможности извлекать информацию и автоматизирования работы на сайте.
    Мне например нужно автоматизировать работу с сайтом что бы скрип логинился и настраивал веб сервис по наблюдению за камерами наблюдения (извините за тафто логию) Вот например $IE.Document.forms | Select-Object name не работает у меня ну понятно в документе том форм нету Опишите пожалуйста еще возможность оперироваться елементами хтмл по их ID например

    • 11/02/2014 в 10:28

      То, что описано в статье делалось, когда была актуальна версия Powershell 2.0. Если у Вас Powershell 3.0 и выше, то попробуйте использовать специальный командлет Invoke-WebRequest: http://technet.microsoft.com/en-us/library/hh849901.aspx. Просмотрите до конца — внизу есть примеры.

      А что, для наблюдения за камерами нет ничего более подходящего, чем Powershell и веб? (Я просто не в теме :))

  6. Artem
    10/02/2014 в 19:55

    $IE.Document.forms | Select-Object name не работает также например на яндексе

  7. Артем
    13/02/2014 в 23:09

    Smearg :

    А что, для наблюдения за камерами нет ничего более подходящего, чем Powershell и веб? (Я просто не в теме :))

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

  1. No trackbacks yet.

Оставьте комментарий