Автор Тема: LWP(post) не проходит страницу с параметрами на job.ru  (Прочитано 6637 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kirch

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Здравствуйте.
Возникла потребность в создании скрипта, который ходил бы на job.ru и обновлял бы моё резюме по расписанию.

В perl-е я пока новичок, поэтому воспользовался чужим, ранее написанным скриптом, который заполняет поисковую форму и скачивает на диск получаемые данные о вакансиях.
Скрипт был устаревшим, т.к. структура страниц изменилась. Но я его доработал, и он получает данные как надо.
Попытался применить тот же подход с использованием библиотеки LWP. Но скрипт не выполняется как задумал.
Для обновления резюме требуется зайти на страницу  $url="http://www.job.ru/editres.html" передать полям id резюме и пароль и нажать на Enter или кликнуть на "Редактировать".
Потом появляется страница с полями резюме. Эту страницу нужно пройти без редактирования. То же по Enter или кликом по "Разместить".
На третьей странице отображаются все поля без редактирования для проверки и в конце ссылка "сохранить резюме". После чего резюме считается обновлённым и поднимается вверх в результатах поиска.

Я остановился на первой странице. Использовал метод post передал id и пароль, но $response возвратил ту же страницу. Что-то делаю не так, но своих знаний не хватает это понять.
Далее привожу код скрипта. Кто может помогите разобраться. Код резюме: 12459752 пароль: jobjob
Тот же метод для поиска (http://www.job.ru/searchvac.jsp?mode=findVacance&submode=find) работает.

 use LWP;
 use Win32::ODBC;
 $url="http://www.job.ru/editres.html";

 $browser=LWP::UserAgent->new;
 $response=$browser->post( $url,
 [
"editObjectsForm_objectId" => \'12459752\',
"editObjectsForm_password" => \'jobjob\',
],
);
die "$url error:", $response->status_line unless $response->is_success;
open (FILE, "> vac.htm") or die "cant open file:$!" ;
print FILE $response->content;
print $response->status_line;
print "\\n ...";
close(FILE);
print "Data transfer succeeded\\n";

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
На куки смотрел?
The documentations is your friend

Оффлайн kirch

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Спасибо за подсказку.

В LWP куки надо включать специальным методом, так?
Нужно ли их писать в файл как предлагается в одной из статей??


use HTTP::Cookies;
$browser->cookie_jar( HTTP::Cookies->new(
\'file\' => \'/some/where/cookies.lwp\',
#файл обмена
\'autosave\' => 1,
#по завершении, сохранять ли файл
));

Оффлайн kirch

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Вот что в куки:
#LWP-Cookies-1.0
Set-Cookie3: wwwJobRulastVisited=1115286563646; path="/"; domain="www.job.ru"; expires="2006-05-05 09:49:22Z"; version=0

Где копать дальше?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Посылать ее и принимать ответ. И т.д.
Тебе нужно создать транспорт для постоянного обменя куками.
The documentations is your friend

Оффлайн kirch

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Форма поиска не требует куки - раз она работает без них.
А эта форма (редактирование резюме) - требует. Реально?

Попробовал отключить куки в браузере, удалил куки на диске.
Пошёл ручками на сайт, ввёл код и пароль - прошёл далее! Значит дело не в куки?

Может дело в полях заголовка?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
При заходе на страницу формы:
http://www.job.ru/searchvac.jsp?mode=findVacance&submode=find

GET http://www.job.ru/searchvac.jsp?mode=findVacance&submode=find HTTP/1.1
Host: http://www.job.ru
User-Agent: Mozilla/5.0 Gecko/20050225 Firefox/1.0.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer: http://forums.webscript.ru/showthread.php?s=&threadid=20239&msgnum=5
Cookie: wwwJobRulastVisited=1115292766161; JSESSIONID=aaa_PwgSB52d-e; hotlog=1

HTTP/1.x 200 OK
Date: Thu, 05 May 2005 10:32:14 GMT
Server: Apache/1.3.26 (Unix) Resin/2.1.0
Set-Cookie: wwwJobRulastVisited=1115292778871; Expires=Fri, 05-May-2006 11:32:57 GMT
Content-Type: text/html
Proxy-Connection: close

Посмотри на куки. При отправке формы они, наверняка, будут запрошены.
The documentations is your friend

Оффлайн kirch

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Благодарю, что есть время на ответы. Согласен, что вопросы во многом повторяют аналогичные на форуме для других задач. По каким ключевым словам мне быстрее найти пример транспорта для куки. Или смотреть все "cook*"?

Почему же вручную всё работало без куки? Или всё-таки они принимались и передавались в обход разрешений браузера.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
В обход - нет. Нужно смотреть на их механизм работы сессии и воссоздать у себя такой-же.

perldoc HTTP::Cookies
The documentations is your friend

Оффлайн kirch

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Т.е. одного метода post мало? Надо сначало через get получить страницу, считать куки и вставить куки в заголовок при заполнении методом post? Как мне подсказывает интуиция...

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Да, пробуй.
The documentations is your friend

Оффлайн kirch

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что опять ей не нравится? Получаю и посылаю куки.
Проверяю полученный ответ - вижу первую страницу. Как до второй добраться?
Ниже скрипт, кто увидит ляпы - подскажите.

use LWP;
use HTTP::Cookies;
$url0=\'http://www.job.ru/editres.html\';
$url =\'http://www.job.ru/edit.jsp?mode=editObjects&submode=do\';

$cok=HTTP::Cookies->new;

$browser=LWP::UserAgent->new;

$req=HTTP::Request->new(GET => $url0);

$response=$browser->request($req);

$cok->extract_cookies($response);

die "$url0 error:", $response->status_line unless $response->is_success;

теперь постим код и пароль по следующему адресу (поле action);

$req=HTTP::Request->new(POST => $url);

$req->content_type(\'application/x-www-form-urlencoded\');

$req->content("editObjectsForm_objectId" => \'12459752\');

$req->content("editObjectsForm_password" => \'jobjob\');

$req->content("editObjectsForm_objectType" => "resume");

# $req->content("editObjectsForm_buttonType" => ""); - наверно необязательно

$cok->add_cookie_header($req);

$response2 = $browser->request($req);

die "$url error:", $response2->status_line unless $response2->is_success;

open (FILE, "> vac.htm") or die "cant open file:$!" ;

print FILE $response2->content;

print "OK";

Оффлайн kirch

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
забыл в конце
close(FILE);
 хотя это ничего не меняет

Оффлайн kirch

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Требуется очередной совет!
Прошёл две формы, а на третьем окне застрял. Возвращает второе вместо четвёртого.
Кажется, что надо просто пойти по ссылке "Сохранить резюме", но не идёт.
Пробовал вручную проделать: скопировал ссылку и вставил в другое окно - то же вернуло на второе окно.
Может дело в том что создаётся новая сессия агента? Кто подскажет.

#use strict;
my $j=0;
use LWP;
use HTML::TreeBuilder;
my $url = \'http://www.job.ru/editres.html\';
my $br = LWP::UserAgent->new();

my $resp = $br->request(HTTP::Request->new(GET => $url));

die unless $resp->is_success;
my $tree = HTML::TreeBuilder->new_from_content($resp->content);
my @forms = $tree->look_down(\'_tag\', \'form\');
my $url2 = \'http://www.job.ru/\' . $forms[0]->attr(\'action\');
my @content = $forms[0]->look_down(\'_tag\', \'input\');
my @post;
foreach my $t (@content) {
if ($t->attr(\'type\') eq \'hidden\') { push @post, $t->attr(\'name\') . \'=\' . $t->attr(\'value\'); }
}
push @post, "editObjectsForm_objectId=12459752";
push @post, "editObjectsForm_password=jobjob";
$tree->delete();

print \'2:\', $url2, "\\n", join(\'&\', @post), "\\n"; ## debug info

my $req=HTTP::Request->new(POST => $url2);
$req->content_type(\'application/x-www-form-urlencoded\');
$req->content(join(\'&\', @post));
my $resp2 = $br->request($req);
die unless $resp2->is_success;
open FILE, \'>\', \'C:/temp/11.html\';
print FILE $resp2->content;
close FILE;

my $tree2 = HTML::TreeBuilder->new_from_content($resp2->content);
my @forms2 = $tree2->look_down(\'_tag\', \'form\');
my $url3 = \'http://www.job.ru/\' . $forms2[0]->attr(\'action\');
my @content2 = $forms2[0]->look_down(\'_tag\', \'input\');
my @post2;

foreach my $t2 (@content2) { push @post2, $t2->attr(\'name\') . \'=\' . $t2->attr(\'value\'); }
$tree2->delete();

my $url4=$url3;
print \'3; \', $url3, "\\n", join(\'&\', @post2), "\\n"; ## debug info

my $req2=HTTP::Request->new(POST => $url3);
$req2->content_type(\'application/x-www-form-urlencoded\');
$req2->content(join(\'&\', @post2));
my $resp3 = $br->request($req2);
die unless $resp3->is_success;
open FILE, \'>\', \'C:/temp/12.html\';
print FILE $resp3->content;
close FILE;



$url4 =~ s/viewaddres/addres/;
$url4 =~ s/=view/=add/;

print \'4: \', $url4;

my $resp4 = $br->get( $url4 );
die "Can\'t get $url4 -- ", $resp4->status_line
unless $resp4->is_success;


if($resp4->content =~ m/его ID: (\\d+)/i) {
print "ID=$1"; }
open FILE, \'>\', \'C:/temp/13.html\';
print FILE $resp4->content;
close FILE;

Оффлайн sergejru

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.flat.su
Так чем здесь дело закончилось?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28