CMD/BAT - Парсинг HTML

Аватара пользователя
Smasher

CMD/BAT - Парсинг HTML

Сообщение Smasher »

Будьте любезны, подскажите мне как "вытащить" нужные мне части из HTML и поместить их в переменные для дальнейшего использования. Вот часть кода HTML:





HTML код:

Код: Выделить всё

<form name="login" method="post" action="/index.php.htm?again=yes">
<input type="hidden" name="security_token" value="kYuaS/i/YsUp9TzXrRg7NOzaIUy4+auW7k73RNkl1ts="> <input type="hidden" name="login_ticket" value="c3b03122aa536e1440bb0091e2dba5f4">
<input type="hidden" name="resolution"  value="">



Интересуют соответственно следующие присваивания: security_token = kYuaS/i/YsUp9TzXrRg7NOzaIUy4+auW7k73RNkl1ts=[/i] и login_ticket = c3b03122aa536e1440bb0091e2dba5f4



Следующей командой я сужаю поиск до тэгов: FOR /F "tokens=2,4 delims=" %%A IN ('FIND /I "security_token" index.php.htm')



А вот что с этим делать, у меня разобраться не получается. Попытка присвоения а ля DO SET SECTOKLINE = %%A во первых почему-то не совершает присваивания, а во-вторых не обрабатывает второй токен (который, как мне понятно находится в %B)





Ох, а потом ведь ещё придётся переводить спецсимволы в переменной security_token в percent‐encoding, т.е. заменять / на %2F, + на %2B и = на %3D. Это вообще реально?
Аватара пользователя
Dr.DG

Re: CMD/BAT - Парсинг HTML

Сообщение Dr.DG »

Smasher,

CMD/BAT принципиален?

Для парсинга HTML придуманы браузеры, которыми удобно управлять, например, с помощью скриптовых языков.
Аватара пользователя
Guest

Re: CMD/BAT - Парсинг HTML

Сообщение Guest »

Smasher, вариант с
grep
и
wget
:

Код: Выделить всё

@Echo Off
SetLocal EnableDelayedExpansion
Set URL=https://studip.fh-trier.de/index.php.htm?again=yes
Set Page=%Temp%\loginpage.tmp
rem Получаем страницу,особо не отсвечивая и прикидываясь браузером.
wget --no-check-certificate -U "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1" --referer "https://studip.fh-trier.de/index.php.htm" "%URL%" -O "%Page%" 1>nul 2>nul
rem Получение требуемого тэга целиком
For /F "tokens=1 delims=<>" %%A In ('grep -Eo "<input.{21}security_token[^<]*>" "%Page%"') Do (
	rem После избавления от символов перенаправления в предыдущем цикле заменяем
	rem двойные кавычки, потому что их нельзя установить в качестве значения delims
	Set Data=%%A&Set Data=!Data:"='!
	rem И вытягиваем ключик
	For /F "tokens=6 delims='" %%B In ("!Data!") Do (Set security_token=%%B)
)
For /F "tokens=1 delims=<>" %%A In ('grep -Eo "<input.{21}login_ticket[^<]*>" "%Page%"') Do (
	Set Data=%%A&Set Data=!Data:"='!
	For /F "tokens=6 delims='" %%B In ("!Data!") Do (Set login_ticket=%%B)
)
Echo security_token:	!security_token!
Echo login_ticket:	!login_ticket!
Pause
Аватара пользователя
Iska

Re: CMD/BAT - Парсинг HTML

Сообщение Iska »

Smasher, всё равно без загрузки страницы с формой и последующего разбора посредством DOM не обойтись. Проще всего это сделать на WSH или PoSH. Страница с формой доступна в глобальной сети?
Аватара пользователя
Smasher

Re: CMD/BAT - Парсинг HTML

Сообщение Smasher »

Дело в том, что всё это делается ради того, чтобы совершить WGET'ом авторизацию на одном сайте таким образом:





Код:

Код: Выделить всё

:WGET --post-data="security_token=%SECURITY_TOKEN&login_ticket=%LOGIN_TICKET&resolution=&loginname=123&password=123" https://studip.fh-trier.de/index.php.htm --delete.after

А это в свою очередь делается для того чтобы опять-таки WGET'ом вызвать страницу, к которой без авторизации доступа нет. А точнее сделать несколько вызовов в течении 5 секунд.
Аватара пользователя
Smasher

Re: CMD/BAT - Парсинг HTML

Сообщение Smasher »

Iska, ну так я и загружал первым делом страницу с формой, а потом уже пытался её разобрать. Вообщем, мне неважно какими средствами это сделать, лишь бы достичь вышеуказанной цели. Если говорить ещё конкретнее, мне нужно в определённое время сделать короткий флуд по адресу
https://studip.fh-trier.de/sem_verif...m_p ortal.php


Ну чтобы без криминала, например, в течении 10 секунд 20 вызовов. Почему-то первым в голову пришло написать батник с использованием wget.



Страница с формой соответственно находится по адресу
studip.fh-trier.de
Аватара пользователя
Foreigner

Re: CMD/BAT - Парсинг HTML

Сообщение Foreigner »

Smasher, С помощью голого батника универсального решения нет, кто знает какие символы содержат значения.

На примере твоего index.php.htm:

Код: Выделить всё

@echo off
setlocal
for /f "tokens=*" %%i in ('findstr "security_token login_ticket" index.php.htm') do set string="%%i"
set "string="%string:<=%""
set "string="%string:>=%""
set "string=%string:"=%"
for /f "tokens=4,8" %%i in ('set string') do call:1 "%%i" "%%j"
echo %security_token_value%
echo %login_ticket_value%
goto:eof
:1
set "security_token_%~1"
set "login_ticket_%~2"
Аватара пользователя
Bob256

Re: CMD/BAT - Парсинг HTML

Сообщение Bob256 »

Код:

Код: Выделить всё

for /f "tokens=2,4 delims=" %%I in ('find /I "security_token" index.php.htm') do (
  for /f "usebackq tokens=4,5,7 delims== " %%K in ('%%I') do if "%%K"=="name" set %%~L=%%~M
  for /f "usebackq tokens=4,5,7 delims== " %%K in ('%%J') do if "%%K"=="name" set %%~L=%%~M
)
echo security_token="%security_token%"
echo login_ticket="%login_ticket%"
Аватара пользователя
Smasher

Re: CMD/BAT - Парсинг HTML

Сообщение Smasher »

Bob256, неплохая идея, но у security_token "съедается" последний символ, т.е. знак равенства.



Foreigner, работает, спасибо! Сейчас постараюсь разобраться, что там наколдовано Изображение



Ещё бы для security_token сделать перевод спецсимволов в URL-кодировку (см. первый пост)
Аватара пользователя
Ortis

Re: CMD/BAT - Парсинг HTML

Сообщение Ortis »

Iska, любопытно посмотреть на решение с помощью DOM-технологии.

Но мне кажется что удобнее использовать утилиты типа sed и awk.

Например, с помощью sed эта задача решается в полторы строчки:



Код:

Код: Выделить всё

@echo off
cls
set "filehtml=Ваш файл"
FOR /F "tokens=1-4 delims=;," %%A IN ('sed -rn "/<input type/{s/.*(security_token)\x22 value.\x22(.*)\x22\x3E.*(login_ticket)\x22 value.\x22(.*)\x22\x3E.*$/\1;\2,\3;\4/p}" "%filehtml%"') do echo %%B %%D

голый батник не рекомендую использовать, ввиду подножек из спецсимволов.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»