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

Компьютерный форум 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

 

Старожил


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

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


Smasher, вариант с grep и wget :
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

Set URL=https://studip.fh-trier.de/index.php?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" "%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
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:02, 24-09-2012 | #11



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

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


Ветеран


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

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


Цитата Ortis:
Iska, любопытно посмотреть на решение с помощью DOM-технологии. »
Ничего интересного, разве что надёжнее.

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


Старожил


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

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


Всем спасибо за предложенные варианты, буду разбираться как что работает, очень интересно

Насчёт замены спецсимволов предложенный Bob256 вариант работает в случае символов "/" и "+", а со знаком равенства следующая конструкция (построенная мной аналогично предложенным) не работает:

Код: Выделить весь код
set security_token=!security_token:==%%3D!
С таким кодом вместо замены символов переменной присваивается значение security_token:==%3D

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


Старожил


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

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


Чтобы не открывать новую тему, спрошу здесь: можно ли посредством BAT запустить несколько процессов параллельно, т.е. не дожидаясь пока закончит выполнение первый, запустить ещё несколько? Ну, например, в линуксе можно было бы это реализовать посредством символа "@" в конце строки, таким образом процесс запускается в бэкграунде. А в Windows я не знаю как это сделать. Если с помощью BAT это сделать невозможно (что я подозреваю так и есть), подскажите каким ещё способом это можно автоматизировать?

Отправлено: 17:17, 25-09-2012 | #14


Старожил


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

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


Цитата Smasher:
таким образом процесс запускается в бэкграунде »
Что-то вроде этого можно получить, используя "Start" с ключом "/B". При этом отдельного видимого окна не создается, и программа использует для вывода информации уже существующее окно родительского скрипта.
И всё-таки, согласно правилам этого форума - "отдельный вопрос = отдельная тема".
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:45, 25-09-2012 | #15



Компьютерный форум 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




 
Переход