Страница 1 из 1

Скрипт для автозаполнения web-форм

Добавлено: 2008-01-11 14:51:20
Andy2k
Заранее прощу прощения, если вопрос из FAQ

Рискну предположить, что мой "доблестный" интернет-провайдер видимо набрал на работу студентов первого курса филфака :). Иначе как еще объяснить следующее: для того, чтобы использовать услугу "Ночной бонус" (с 0 часов и до 6 утра трафик за полцены) я должен....изменить свой логин в настройках ADSL модема. Причем после 6 утра ночной логин перестанет действовать и надо вернуть старый. Умники каке-то настраивали биллинг, блин.

У меня стоит ADSL модем HUAWAY 800MT, у него есть веб-интерфейс где задаются все настройки. Вопрос: есть ли какой-нибудь скрипт на Perl, где можно задать в виде сценария: на какой адрес зайти, потом по каким ссылкам перейти, куда и что записать и на какие кнопки в веб-форме нажать.

Хочется запускать такой скрипт по cron.

Заранее спасибо.

Re: Скрипт для автозаполнения web-форм

Добавлено: 2008-01-11 15:02:20
hizel
search.cpan.org поможет отцу русской демократии
однако почему свет клином сошелся именно на perl
я когда подбирался к решению этого ворпроса
обратил на отличнейшую библиотеку у python lxml
для распарсивания html очень удобна, работаешь
в терминах объектов\контейнеров изменять
и вводть например через средства входящие в
стандартную библиотеку python

в перле именна та часть которая в python lxml
есть в cpan-е несколько, но не дотягивает по функционалу

Re: Скрипт для автозаполнения web-форм

Добавлено: 2008-01-11 15:59:26
Andy2k
Спасибо за ответ, но мне чем проще - тем лучше, потому что python и html практически не знаю.
В идеале - не библиотеки на search.cpan.org - а какой-нибудь готовый набор, в котором просто настроить конфиг.

Re: Скрипт для автозаполнения web-форм

Добавлено: 2008-01-11 16:16:30
hizel
тогда в гугел :)
зря вы так насчет cpan
там же валяется не только либы , может что и под ваши запросы найдется

Re: Скрипт для автозаполнения web-форм

Добавлено: 2008-01-12 1:50:27
Alex Keda
руби-питоны-жабы....
какие-то африканские языки...
лучше уж и правда перл =)

Re: Скрипт для автозаполнения web-форм

Добавлено: 2008-01-12 8:47:38
zg
Andy2k писал(а):Вопрос: есть ли какой-нибудь скрипт на Perl, где можно задать в виде сценария: на какой адрес зайти, потом по каким ссылкам перейти, куда и что записать и на какие кнопки в веб-форме нажать.

Хочется запускать такой скрипт по cron.
а в чём трабла то? смотришь какой запрос отправляется при авторизации, потом через скрипт коннектишься на 80 порт страницы авторизации, отсылаешь точно такой же запрос, в ответ получаешь заголовок, в котором содержится SID (идентификатор сессии, должен быть в куках и в ссылках), потом отсылаешь запрос на смену логина и лепишь туда идентификатор сессии, чтоб авторизации не было. Это всё очень легко, просто поставь снифер http траффика, он тебе покажет запросы от браузера и ответы сервера. Я юзаю wget -S --spider для получения заголовок от сервера

Re: Скрипт для автозаполнения web-форм

Добавлено: 2008-01-12 13:27:28
Andy2k
В далекие времена моего детства по телеку показывали французский мультик "Путешествие вокруг света за 80 дней..."
На всю жизнь запомнилась оттуда фраза мистера Филеаса Фога: "Используй то, что под рукой и не ищи себе другое..." :D

Короче, проблема решилась так:

1. Берем самый обычный и привычный текстовый браузер Lynx и запускаем вот так:
#lynx -cmd_log=my_log http://www....

...
тут мы ползаем по страничке, пишем, жмем кнопки и наконец выходим из lynx

Получился у нас текстовый файл my_log с записбю всех наших действий

2. Теперь запускаем lynx так:
#lynx -cmd_script=my_log http://www....

Вуаля! Все отработало автоматически.

Re: Скрипт для автозаполнения web-форм

Добавлено: 2008-01-12 14:32:33
dikens3
А я CURL ставил и в нём несколько строчек выдумывал. :-(

Re: Скрипт для автозаполнения web-форм

Добавлено: 2008-01-13 15:42:38
Proftp

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

#!/usr/bin/perl
$text = StrEscaped("Есть многое на свете, друг Гораций,
                    что и не снилось нашим мудрецам!");
$url = "https://cgi-bin/LogIn.cgi";
$name = "ЛОГИН";
$pass = "ПАРОЛЬ";

# создадим нового Агента пользователя
use LWP::UserAgent;
$ua = LWP::UserAgent->new;

my $req = HTTP::Request->new(POST=>$url);
# указываем тип контекста
$req->content_type('application/x-www-form-urlencoded');
# вводим сам контекст для передачи
$req->content("text=$text&name=ЛОГИН&pass=ПАРОЛЬ");
my $res = $ua->request($req);

# получаем ответ от выводим его
print "Content-type: text/html\n\n";
print $res->content;
# если вы хотите получить полный ответ, с заголовком HTTP,
# воспользуйтесь вызовом print $res->as_string

# вспомогательные процедуры
sub StrEscaped {
  # используем эту процедуру для преобразования
  # передаваемых символов кириллицы
  my ($str)=@_;
  $str=~s/([^0-9A-Za-z\?&=:;])/sprintf("%%%x", ord($1))/eg;
  return $str
}
http://www.sedinko.ru/perl/doc3.php