Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - kirch

Страницы: [1]
1
Требуется очередной совет!
Прошёл две формы, а на третьем окне застрял. Возвращает второе вместо четвёртого.
Кажется, что надо просто пойти по ссылке "Сохранить резюме", но не идёт.
Пробовал вручную проделать: скопировал ссылку и вставил в другое окно - то же вернуло на второе окно.
Может дело в том что создаётся новая сессия агента? Кто подскажет.

#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;

2
забыл в конце
close(FILE);
 хотя это ничего не меняет

3
Что опять ей не нравится? Получаю и посылаю куки.
Проверяю полученный ответ - вижу первую страницу. Как до второй добраться?
Ниже скрипт, кто увидит ляпы - подскажите.

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";

4
Авторы не интересуются о целях использования информации, предоставляемой участниками эл. досок. Информация в открытом доступе. Программа нужна для автоматического размещения вакансий фирмы и дальнейшего анализа состояния рынка труда по категории ИТ.

Сайты www headhunter ru, www job ru, www rabota ru

В какой деализации нужны подробности по скриптам? Сейчас стоит вопрос выделения средств на эту программу.
Варианты реализации размещения информации известны, их можно формализовать, но не сейчас. Реализация сбора информации может быть двумя способами: 1) заполняем поля отбора, получаем краткую информацию по 50-100 записей на странице и по известным id получаем полные данные по вакансиям или резюме. 2) передавая запрос по id в адресе получаем все записи.

Нужна предварительная оценка работ на скрипт (прогу) по простому получению и перекладке в таблицы данных с сайтов и по периодическому хождению на сайты и заполнению форм данными из таблиц на диске. Для оценки можно упростить задачу до работы с одним сайтом (пока), обновления вакансий (резюме) и получение вакансий (резюме) методом (2). Сколько.. Потом будем расширять функциональность.

Отбираем здесь:
http://www.job.ru/findvac.html

Отбор по id здесь:
http://www.job.ru/entry.jsp?mode=queryVacById&submode=do&id=12510991

Публикация здесь:
http://www.job.ru/addvac.html

Обновление здесь:
http://www.job.ru/editvac.html



Другие сайты:
http://www.rabota.ru/vacancy.php?id=6104712&printable=1
http://headhunter.ru/vacancy.do?vacancyId=116633&query=
http://www.rabota.ru/vacancies_form.php?form=full
http://headhunter.ru/applicant/vacancySearch.do?actionReload=%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C&keyword1=&keyword2=&areaId=113&professionalAreaId=1&isFromAgency=10&isWithoutSalary=10&desireableCompensation=0¤cy=1&searchPeriod=3&orderBy=2&itemsOnPage=50

5
Разыскивается скрипт (или автор).
Скрипт должен:
1) периодически закачивать с трёх сайтов информацию по  предложениям вакансий и резюме,
2) периодически публиковать (обновлять) на этих сайтах вакансии,
3) делать всё это в параллельном режиме (мультисессии),
4) тип БД и на чём написано (PHP, Perl, Delphi, C) не важно,
5) важно: хорошо документировать код, попытаться оптимизировать трафик.

Если писать, то нужна оценка в днях/у.е даже приблизительная. Потом обговариваем детали. Взаимовыгодно.:beer: :beer:

6
Т.е. одного метода post мало? Надо сначало через get получить страницу, считать куки и вставить куки в заголовок при заполнении методом post? Как мне подсказывает интуиция...

7
Благодарю, что есть время на ответы. Согласен, что вопросы во многом повторяют аналогичные на форуме для других задач. По каким ключевым словам мне быстрее найти пример транспорта для куки. Или смотреть все "cook*"?

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

8
Форма поиска не требует куки - раз она работает без них.
А эта форма (редактирование резюме) - требует. Реально?

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

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

9
Вот что в куки:
#LWP-Cookies-1.0
Set-Cookie3: wwwJobRulastVisited=1115286563646; path="/"; domain="www.job.ru"; expires="2006-05-05 09:49:22Z"; version=0

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

10
Спасибо за подсказку.

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


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

11
Здравствуйте.
Возникла потребность в создании скрипта, который ходил бы на 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";

Страницы: [1]