Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Парсинг HTML

Ответить
Настройки темы
CMD/BAT - Парсинг HTML

Старожил


Сообщения: 192
Благодарности: 6


Конфигурация

Профиль | Отправить PM | Цитировать


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

HTML код: Выделить весь код
<form name="login" method="post" action="/index.php?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= и login_ticket = c3b03122aa536e1440bb0091e2dba5f4

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

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


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

Отправлено: 16:50, 24-09-2012

 

Новый участник


Сообщения: 15
Благодарности: 5

Профиль | Отправить PM | Цитировать


Smasher,
CMD/BAT принципиален?
Для парсинга HTML придуманы браузеры, которыми удобно управлять, например, с помощью скриптовых языков.

Отправлено: 17:08, 24-09-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 192
Благодарности: 6

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
:WGET --post-data="security_token=%SECURITY_TOKEN&login_ticket=%LOGIN_TICKET&resolution=&loginname=123&password=123" https://studip.fh-trier.de/index.php --delete.after
А это в свою очередь делается для того чтобы опять-таки WGET'ом вызвать страницу, к которой без авторизации доступа нет. А точнее сделать несколько вызовов в течении 5 секунд.

Отправлено: 17:37, 24-09-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:20, 24-09-2012 | #4


Старожил


Сообщения: 192
Благодарности: 6

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 20:13, 24-09-2012 | #5


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Smasher, С помощью голого батника универсального решения нет, кто знает какие символы содержат значения.
На примере твоего index.php:
Код: Выделить весь код
@echo off
setlocal

for /f "tokens=*" %%i in ('findstr "security_token login_ticket" index.php') 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"
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:09, 24-09-2012 | #6


Новый участник


Сообщения: 49
Благодарности: 14

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
for /f "tokens=2,4 delims=<>" %%I in ('find /I "security_token" index.php') 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%"
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:12, 24-09-2012 | #7


Старожил


Сообщения: 192
Благодарности: 6

Профиль | Отправить PM | Цитировать


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

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

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

Отправлено: 21:18, 24-09-2012 | #8


Новый участник


Сообщения: 9
Благодарности: 2

Профиль | Отправить PM | Цитировать


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
голый батник не рекомендую использовать, ввиду подножек из спецсимволов.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:34, 24-09-2012 | #9


Новый участник


Сообщения: 49
Благодарности: 14

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
set security_token=!security_token:/=%%2F!
set security_token=!security_token:+=%%2B!=
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:55, 24-09-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Парсинг HTML

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Парсинг XML/TXT mxm199 Скриптовые языки администрирования Windows 10 17-07-2012 12:34
Java - Парсинг doc-файла Hector Программирование и базы данных 7 15-03-2012 21:37
CMD/BAT - Парсинг Чин Хон Скриптовые языки администрирования Windows 1 04-02-2011 13:51
Delphi - Парсинг Miko Программирование и базы данных 7 27-09-2010 10:46
Парсинг PR venuko Вебмастеру 3 13-01-2010 14:15




 
Переход