Обработка содержимого веб-страниц и HTML сайтов в Powershell

В PowerShell версии 3.0 появилась возможность напрямую обращаться и работать с HTML веб-страницам в Интернете. Для этого был разработан специальный командлет InvokeWebRequest.  Данный командлет позволяет реализовать множество сценариев: начиная от возможности скачать/закачать файл с любого сайта по HTTP (S) / FTP, заканчивая возможностями парсинга HTML страниц, мониторинга состояния веб сервисов, заполнения и отправкой веб-форм. В целом, новый командлет предоставляет все необходимые методы для навигации по DOM дереву HTML документа.  В этой статье мы разберём базовые примеры работы с командлетом PowerShell  Invoke-WebRequest.

Совет. Командлет работает в Windows PowerShell 3.0, поэтому перед началом работы убедитесь, что у вас используется эта версия или более свежая. Если на компьютере установлено несколько версий Posh, переключится между ними можно так.

Получаем список всех ссылок на странице

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

Обратимся к главной странице нашего сайта и получим список ссылок, имеющихся на ней:

$SiteAdress = "http://winitpro.ru"

$HttpContent = Invoke-WebRequest -URI $SiteAdress

$HttpContent.Links | Foreach {$_.href }

Обработка содержимого веб страниц html с powershell

Чтобы получить и сам текст ссылки (содержится в элементе InnerText), можно воспользоваться такой конструкцией:

$HttpContent.Links | fl innerText, href

Invoke-WebRequest получить список ссылок и их анкоров на странице

Как скачать файл по HTTP с помощью Powershell

Invoke-WebRequest может работать как аналог Wget или cURL для Windows, позволяя скачать с веб страницы или ftp сайта нужный файл/файлы. Допустим, нам нужно с помощю Powershell скачать по HTTP некий файл (в нашем примере дистрибутив Mozilla Firefox). Выполним такую команду:

Invoke-WebRequest "https://download.mozilla.org/?product=firefox-32.0.3-SSL&os=win&lang=ru" -outfile “c:\tools\firefox setup 32.0.3.exe” Аналог wget на powershell: как скачать файл по http

В результате выполнения командлета с указанного URL адреса будет скачан файл и сохранен в каталоге c:\tools\  под именем firefox setup 32.0.3.exe. Если нужно скачать файл с FTP сайта, просто замените http: // на  ftp: //.

Проверка статуса ответа веб-сервера и HTTP заголовков

С помощью Invoke-WebRequest можно получить код ответа веб-сервера и статус HTML страницы

$HttpContent = Invoke-WebRequest "http://winitpro.ru/"

$HttpContent.StatusCode

Как мы видим, веб сервер вернул ответ 200 , т.е. запрос выполнен успешно и веб сервер доступен и работает корректно.

Получить остальные HTTP заголовки веб-страницы можно так:

$HttpContent.Headers Powershell получить статус и HTTP заголовки веб страницы

Парсинг HTML страниц с помощью Powershell

Командлет Invoke-WebRequest позволяет довольно быстро и удобно парсить содержимое любых веб-страниц. При обработки HTML страницы из ее содержимого формируются коллекции ссылок (links), веб-форм (forms), изображений (images), скриптов (scripts) и т.д.

С помощью Powershell получим содержимое главной страницы нашего сайта:

$Img = Invoke-WebRequest "http://winitpro.ru/"

Затем выведем список всех изображений на данной странице

$Img.Images

Сформируем коллекцию из полных url путей к используемым изображениям:

$images = $Img.Images | select src

Инициализируем новый экземпляр класса WebClient.

$wc = New-Object System.Net.WebClient

И скачаем все изображения со страницы (с оригинальными именами) в каталог c:\tools\.

$images | foreach { $wc.DownloadFile( $_.src, ("c:\tools\"+[io.path]::GetFileName($_.src) ) ) }

Пример парсинга html страницы на powershell

Заполнение и отправка веб-форм на Powershell

Многие веб-сервисы для работы требуют ввода различных данных в HTML формы. С помощью Invoke-WebRequest можно получить доступ к любой HTML-форме, заполнить необходимые поля и передать заполненную форму обратно на сервер. В этом примере мы покажем как с помощью Powershell авторизоваться в почтовом ящике популярного российского сервиса mail.ru через его стандартную веб форму.

powershell аутентификация с помощью веб форм на mailru

С помощью следующей конструкции сохраним информацию о куках (Cookies) подключения в отдельной сессионной переменной.

$mailru = Invoke-WebRequest https://e.mail.ru/login -SessionVariable session

Следующей командой отобразим список заполняемых полей в HTML форме авторизации (форма называется LoginExternal).

$mailru.Forms["LoginExternal"].Fields

Присвоим нужные значения всем полям:

$mailru.Forms["LoginExternal"].Fields["Login"] = "testmail@mail.ru"

$mailru.Forms["LoginExternal"].Fields["Password"] = "Str0NgP$$w0rd"

И т.д….

Чтобы передать заполненную форму на веб сервер, вызовем атрибут HTML-формы action.

$Log = Invoke-WebRequest -method POST -URI ("https://e.mail.ru/login" + $mailru.Forms["LoginExternal"].Action) -Body $mailru.Forms["LoginExternal"].Fields -WebSession $session


Предыдущая статья Следующая статья


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

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

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

Я не робот( Обязательно отметьте)