Тема: Авторизация на сайте HR

Oompaloomp пишет:

Уважаемые коллеги, добый день
Никак не получается пройти корректно авторизацию на крупных сайтах HR(HH, SJ, Rabota и др.) средствами cURL командной строки с последующим сохранением файла с куками на локальном диске для дальнейшего его использования.
Цель - обновление резюме по расписанию с помощью утилиты cURL.
Пользуюсь встроенными в браузеры Веб-консолями (Инструменты — Веб разработка — Веб-консоль) с помощью которых получаю полный код запроса: метод, куки, заголовки.
Но такой запрос слишком громозский и содежить много лишней воды, это определил опытным "методом научного тыка"(реверс инженеринга) например:

+ code cURL
curl "http://www.superjob.ru/resume/update_datepub.html?id=*******" -H "Cookie: ssl_check=success; reloaded=false; sjvid=*********; bf_order=asc; _ym_uid=**********; company_search_town=1; sr=abab11aa1; testcookie=********; ctown=1; quicksearchkey=***********; mailcast[6353301]=******; reg_user_id=**********; reg_user_name=*********** reg_user_email=********* reg_user_cv=*********; ssl_check=success; pt_source=yandex; enter_referer=http******** enter_url=superjob.ru***********; enter_date=1454907244; uechat_34579_mode=0; _wss=***********; _ws=**************; _ym_visorc_31419523=b; reg_user_pass=**********; _ga=GA1.*.*********.***********; _gat=1; uechat_34579_pages_count=1; uechat_34579_first_time=1455078534600; _ym_isad=0; _ym_visorc_1605911=b; __unam=************; _sp_id.8ab7=**********; _sp_ses.8ab7=*" -H "Accept-Encoding: gzip, deflate, sdch" -H "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2450" -H "Accept: application/json, text/javascript, */*; q=0.01" -H "Referer: http://www.superjob.ru/resume/********.html" -H "X-Requested-With: XMLHttpRequest" -H "Connection: keep-alive" --compressed

Убрав все лишнее и проверив работоспособность получил

curl "http://www.superjob.ru/resume/update_datepub.html?id=*******" -H "Cookie: reg_user_id=*******; reg_user_pass=**********"

Куки передаются как заголовок в которых оставил только reg_user_id= и reg_user_pass=

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

LG 42LA644V/Philips 32PFL3605/60

2

Re: Авторизация на сайте HR

Да уж, не просто далось это...

В общем так.
При просмотре формы отправки запроса на авторизацию видим, что кроме параметров username и password есть ещё один - _xsrf с каким-то значением. Это значение для всех разное и периодически меняется. xsrf - защита, которая придумана специально от межсайтовых подделок запроса и таких как мы с вами.
Как в батнике получить это значение из загруженной страницы? Я не знаю. Но зато увидел, что это значение также засвечивается в куках, когда просто заходишь на сайт.
Поэтому план был примерно такой:
Сделать запрос на сайт с помощью Curl и в параметрах указать сохранение значений кук в файл, потом прочитать файл и выдернуть оттуда значение кода _xsrf.
Потом сделать уже настоящий запрос на авторизацию с передачей параметров, в том числе и этого кода (вместе с использованием файла куков).

Быстро сказка сказывается, да только пока выяснишь, что именно этому гаду надо и почему авторизация не проходит, а возвращает код internal-error, перепробовать пришлось тысячу способов и тестов, чтобы отследить и его кучу перенаправлений и проч.

У меня к вам вопрос, у вас, когда вы на сайт заходите тоже перенаправляет на поддомен вашего региона? Если да, то, возможно, в следующих примерах нужно будет заменить везде домен с hh.ru на perm.hh.ru или типа того.

Также, методом тыка выясняется, что для успешной авторизации нужны куки. Всякие hhuid, hhtoken и прочие.
Делал тесты с заходом на страницу и авторизацией через браузер и просматривал какие запросы идут и какие ответы мы получаем через программу Charles. Хотя это можно делать и любой другой программой, плагином в браузере или в инструментах разработчика в самом браузере. Неважно.
Т.к. charles - это прокси, то, чтобы посмотреть как идут запросы от самого curl можно в его ключах указывать -x "http://localhost:8888" и все запросы будут проходить через него. Для прослушки запросов https, нужно в настройках Чарлис добавить домены в Proxy Settings - SSL, locations - add - host: hh.ru, port: 443 (и также для *.hh.ru).

Также по ключам curl:
-L - следовать всем перенаправлениям (а сайт hh.ru делает из массу при каждом запросе)
-c "cookies-hh.txt" - создавать и сохранять полученные в ответах установку кук в файл
-b "cookies-hh.txt" - использовать файл со значениями кук в запросах
--insecure - просто ключ, говорящий не обращать внимание на не доверенные https соединения (у меня без этого ключа https запросы не проходили).
--data "..." - эт понятно, данные POST запроса.

Методом научного тыка и исследований выяснил, что установка значений кук происходит по такому запросу:
http://hhid.ru/validate/;http;hh.ru;80;/  - это один из адресов, куда было перенаправление. Если мы сделаем запрос такой странички командой

curl -L -c "cookies-hh.txt" "http://hhid.ru/validate/;http;hh.ru;80;/" > nul

Мы получим в файл cookies-hh.txt кучу кук, которые нам пригодятся.

А вот с вытаскиванием из этого файла значение _xsrf тоже пришлось применять смекалку и попахать гугл. Чтобы в итоге в одну красивую строку уместить получение всех значений кук из файла в переменные окружения:

for /f "tokens=6,7 skip=3" %%G in (cookies-hh.txt) do set %%G=%%H

Вот эта строка в батнике читает файл cookies-hh.txt, по умолчанию разделители (delims) - пробел и указываем, какие из значений столбцов (6 и 7) брать и потом командой
set %%G=%%H устанавливаем переменные с прочитанным именем и значением.
После этого, например, можно сделать команду: echo %_xsrf%  - выведет значение этого кода.

Тэкс. Ну и всё, Потом уже делаем POST запрос авторизации по адресу https://hh.ru/account/login с указанием всех параметров.

Вот такой вот батник у меня получился:

@rem Делаем запрос страницы, чтобы получить куки в файл
curl -L -c "cookies-hh.txt" "http://hhid.ru/validate/;http;hh.ru;80;/" > nul

@rem Считываем построчно файл cookies-hh.txt 
@rem и заносим значения кук в переменные окружения по их именам

for /f "tokens=6,7 skip=3" %%G in (cookies-hh.txt) do set %%G=%%H

@rem Теперь в переменной %_xsrf% у нас хранится значение кода
@echo %_xsrf%

@rem Делаем запрос авторизации на сайт с указанием параметров для POST запроса
curl -b "cookies-hh.txt" -c "cookies-hh.txt" -L --insecure --data "username=WendyH%%40mail.com&password=****&backUrl=http%%3A%%2F%%2Fhh.ru%%2F&action=%%D0%%92%%D0%%BE%%D0%%B9%%D1%%82%%D0%%B8&_xsrf=%_xsrf%" "https://hh.ru/account/login" > answ1.html

@rem Теперь можно запрашивать личные страницы
curl -b "cookies-hh.txt" -c "cookies-hh.txt" -L --insecure "http://hh.ru/applicant/resumes/short?resume=" > answ_resume.html

Заметьте, там где в запросе должен быть знак процента %, в батнике нужно его дублировать, ибо он используется для работы с переменными.


А скажите, если не секрет, зачем вам скрипт обновления резюме? Оно так часто меняется?

Sony Bravia KDL-32CX523
Спасибо сказали: Oompaloomp1

3

Re: Авторизация на сайте HR

WendyH, добрый день
ну во первых снимаю шляпу перед проделанной Вами работой.

WendyH пишет:

У меня к вам вопрос, у вас, когда вы на сайт заходите тоже перенаправляет на поддомен вашего региона? Если да, то, возможно, в следующих примерах нужно будет заменить везде домен с hh.ru на perm.hh.ru или типа того.

Да перенаправляет на поддомен региона.

WendyH пишет:

А скажите, если не секрет, зачем вам скрипт обновления резюме? Оно так часто меняется?

Почти на всех HR сайтах предлагается обновлять резюме т.е. поднимать в списке(причем с переодичностью меньше возможной) за деньги.
Естественно платить за это глупо, а руками обновлять каждые 4 часа, для HH.ru, очень лениво и не всегда возможно.
Вот поэтому решал задачу автоматизации такого обновления.

WendyH пишет:

Также, методом тыка выясняется, что для успешной авторизации нужны куки. Всякие hhuid, hhtoken и прочие.

Да причем в куках достаточно оставить только эти два значения, при их актуальности сайт принимает запросы.

LG 42LA644V/Philips 32PFL3605/60

4 (2016.02.12 19:02:03 отредактировано Oompaloomp)

Re: Авторизация на сайте HR

Чёрд
HH артачится
сначала получилось удачно авторизоваться
теперь:
Извините, сервис временно недоступен. Попробуйте чуть позже
Заметил ещё, что кнопка
action=Войти
меняется на
action=Войти в личный кабинет
ещё один момент
параметр _xsrf в сохраненных куках разнится с тем что выдает сам сайт в анализе через консоль.
Ещё при попытке использовать http://perm.hh.ru/applicant/resumes/touch без заголовка -H "User-Agent:

+ Доступ запрещен

Доступ запрещен
Возможно, вы перешли по ссылке с подозрительного сайта, который пытался использовать ваши данные. Мы защитили вашу конфиденциальную информацию, и вы можете продолжить работу с сайтом.
Если же ошибка на данной странице повторяется, напишите нам о ней с подробным описанием: в каком случае проявляется, какой url страницы, какой код ошибки (1455262524536561c4ce8cfc4238f289), на какую почту вы зарегистрированы на perm.hh.ru — на адрес error@hh.ru.

С идентификатором как браузер 405: Method Not Allowed
поэтому последний запрос у меня выглядит сейчас во так:

curl -X POST -b "cookies_hh.txt" -c "cookies_hh.txt" -L --insecure "http://perm.hh.ru/applicant/resumes/touch" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2450.0 Iron/46.0.2450.0 Safari/537.36" --data "resume=***&undirectable=true" > upd_resume.html

UPD
с авторизацией разобрался всё работает, но обновить резюме пока не получается.
UPD2
так странно, а вот создание резюме работает http://perm.hh.ru/applicant/resumes/short?resume=
"Обновить" - единственная кнопка которая пока отказывается работать, остальные редактировать и другие срабатывают без проблем.

LG 42LA644V/Philips 32PFL3605/60

5

Re: Авторизация на сайте HR

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

Проверить обновление резюме пока не могу, ибо нет таких кнопок. При нажатии "Выделить резюме" пишет, что пока нельзя, ибо оно пока обрабатывается. Интересно, там человеком обрабатываются резюме? А то я там фигню всякую написал, типа "Младшим техническим специалистом" за 150 тыщ хочу.

Sony Bravia KDL-32CX523

6

Re: Авторизация на сайте HR

WendyH пишет:

"Младшим техническим специалистом" за 150 тыщ хочу.

Ну это нормально =)

LG 42LA644V/Philips 32PFL3605/60

7

Re: Авторизация на сайте HR

Определил обязательный заголовок:
-H "X-Xsrftoken: %_xsrf%"

LG 42LA644V/Philips 32PFL3605/60

8

Re: Авторизация на сайте HR

Oompaloomp пишет:

Определил обязательный заголовок:
-H "X-Xsrftoken: %_xsrf%"

UPD
Этот заголовок сыграл решающую роль в работоспособности скрипта на обновление резюме.
WendyH, благодарю Вас за помощь в написании скрипта, особенно за переменную %_xsrf% которая также пригодилась для ключевого заголовка т.к. она равна параметру _xsrf необходимому для авторизации.
Задача полностью выполнена.

LG 42LA644V/Philips 32PFL3605/60

9 (2016.02.15 20:51:02 отредактировано Oompaloomp)

Re: Авторизация на сайте HR

Столкнулся с очень странной проблемой
метод вызова запроса каким то образом влияет на сохранение файла с куками исключительно для сайта superjob.ru
например:
если запрос на авторизацию вручную вставить в командную строку:

+ incert to cmd

incert to cmd

то файл с куками сохраняется со всеми необходимыми для авторизации и дальнейших действий параметрами
но если вызвать запрос батником

+ use .bat

use .bat

то файл сохраняется с не полным списком необходимых для авторизации параметров.

+ содержимое .bat
curl.exe curl -c "cookies_sj.txt" --data "returnUrl=http%3A%2F%2Fwww.superjob.ru%2F&LoginForm%5Blogin%5D=email&LoginForm%5Bpassword%5D=*****" "http://www.superjob.ru/user/login/" > answSJ.html

Это противоречие работает только для сайта superjob.ru
На HH и Rabota резюме без проблем обновляются батниками
Пробовал менять кодировку батника, пробовал прописывать в начале запроса

curl.exe curl
start "" curl.exe curl

ничего не помогло.

LG 42LA644V/Philips 32PFL3605/60

10

Re: Авторизация на сайте HR

Oompaloomp пишет:
curl.exe curl

У вас лишний параметр. У Курла нет параметра "curl".
Он просто его игнорирует. Это будет эквивалентно:

curl.exe abracadabra -c "cookies_sj.txt" "http://url.com"

Просто в примерах использования не ставят разрешение .exe, ибо примеры кроссплатформенны, как и Курл. Пот виндой тоже не обязательно расширение указывать при запуске, он ищет сам exe, cmd, bat с таким именем. Но да это никак ни на что не влияет. Это я так, "зануда мод" включил.
Кстати, вспоминаю Windows 95/98, как один из векторов атаки - создание одноименного системного файла, только с расширением .com (простой не PE исполняемый файл, наследие DOS), например, папке Windows\System32 можно было расположить calc.com и именно он будет запускаться, если кто-то наберёт "calc". Потому как .com расширение искалось первым, а потом .exe. Или даже .bat первым, уже и не помню..

А разница в батнике и командной строке - как мы все помним, в знаках процента.
Т.к. в батниках этот знак используется для определения переменных, то его там нужно двоить.
Лично я на эти грабли с постоянной периодичностью наступаю.

Командная строка:

curl -c "cookies_sj.txt" --data "returnUrl=http%3A%2F%2Fwww.superjob.ru%2F&LoginForm%5Blogin%5D=email&LoginForm%5Bpassword%5D=*****" "http://www.superjob.ru/user/login/" > answSJ.html

Содержимое батника:

curl -c "cookies_sj.txt" --data "returnUrl=http%%3A%%2F%%2Fwww.superjob.ru%%2F&LoginForm%%5Blogin%%5D=email&LoginForm%%5Bpassword%%5D=*****" "http://www.superjob.ru/user/login/" > answSJ.html
Sony Bravia KDL-32CX523

11 (2016.02.16 06:19:41 отредактировано Oompaloomp)

Re: Авторизация на сайте HR

WendyH пишет:

Т.к. в батниках этот знак используется для определения переменных, то его там нужно двоить.

WendyH, Вы гений.
Всё заработало.
На знак % не обратил внимание т.к. в скрипте нет объявленных переменных, из-за этого не подумал о двоении.
Спасибо, век живи как говорится

LG 42LA644V/Philips 32PFL3605/60

12

Re: Авторизация на сайте HR

Здравствуйте ,уважаемые знатоки.В недалеком прошлом,загорелся идеей сделать такую же утилиту,как у Mr. Oompaloomp,однако разобраться с подсказками,которые давал  Mr.WendyH,не так то просто.Вернее ваще нихера не понимаю как это все должно быть..)
Цель моего пути в мир программирования - прога,благодаря которой будут обновляться вакансии на сайтах без моего участия,но по моему заданному хотению).Не имею понятия,как начать этот процесс.
Куки - не показывает ни моей авторизации,ни действий с кнопкой сайта.кроме __utmc __utmz __utmb __utma нечего взять.
Я ,собственно,прошу подсказок,самоучителей,подзатыльников по вопросу программирования в Delphi либо Java..но с уклоном в сторону написания такой программы.
Благодарю вас,судари.

13

Re: Авторизация на сайте HR

Borya, даже не знаю, что вам посоветовать.
Вы совсем не умеете программировать и хотите научится на примере поставленной себе задачи?
В вашем случае, нужно знать как работает протокол HTTP и вообще web-технологии (в плане сайтов, запросов, форм).
Лично я ни Delphi, ни Java не знаю (может быть не Java, а JavaScript? А то это какбэ очень разные вещи, от слова совсем).
И почему выбор именно на эти языки пал?
Если вы в них ничего не знаете, то может быть имеет смысл выбрать себе Python, если всё равно подразумевается изучение нового языка?
Там порог вхождения пониже, как мне кажется. Найти курсы о нём можно на Strepic.org.
Там же и пара занимательных курсов, после которых вы на практике будете немного больше разбираться в http запросах и анализе ответов.
https://stepic.org/course/Web-технологии-154
https://stepic.org/course/Анализ-безопа … оектов-127
Или обзорно-поверхностно о http
https://stepic.org/lesson/Обзорно-об-ин … 471/step/1
(доступно после регистрации на stepic.org)
Куча курсов и на других ресурсах есть. Тут вам смогут помочь только если будут конкретные вопросы.

И вообще, общего решения для вашей задачи нет. Все сайты разные и они меняются изнутри периодически. Поэтому решение нужно искать на конкретный вопрос с конкретными примерами.

Sony Bravia KDL-32CX523

14

Re: Авторизация на сайте HR

WendyH,премного благодарен за столь быстрый ответ и за ,собственно,дельный совет.
Да,в действительности,я ставлю себе задачи и выполняю их.Обратившись за помощью к людям,знающим свое дело,я понял,что поспешил.Ресурсов не хватит пока что..Ну,или знаний..Итог один.Я сделаю так или иначе то,что хочу.Вопрос во времени и моей скорости обучаемости. )
За выбор языка,нашел тут такую штуку прикольную..   http://pikabu.ru/story/kakoy_yazyik_pro … at_3020594
Уже решил ,что начну с азов.
Если глянули картинку,то буду энтом   [:}

15

Re: Авторизация на сайте HR

Добрый день!
Интересная тема, учитывая, что каждый рано или поздно может столкнуться с HR- сайтами. И здесь в помощь ваш материал – как сократить время на выполнение рутинных  манипуляций с обновлением.
Со свой стороны решил на практике опробовать изложенное на основных сайтах HR.
Из инструментов:  Firefox (+ LiveHTTPHeaders), Chrome (+uMatrix)
Возникшие затруднения:

1) hh
Авторизацию - прошел , но для этого пришлось внести изменения:  вместо;80; прописать  ;443;)
Обновление -  не проходит. Добавление заголовков  User-Agent и X-Xsrftoken не помогло.
2) job
Авторизация –  с одной стороны прошел, с другой стороны видны одни крякозябры.
Предполагаю, что это из-за ajax. Для устранения прописывал  User-Agent и  X-Requested-With не помогло.
Обновление - здесь полный ступор. Вроде и есть информация, но не вяжется с тем как её  реализовать:

GET /clmap/***?page-url=http%3A%2F%2Fwww.job.ru%2Fseeker%2Fuser%2Fcv%2F&pointer-click=rn%***
Host: mc.yandex.ru

3) rabota
Авторизация – прошел
Обновление – не проходит
в  -L –insecure прописывал через /v3_popupMyResumeExpires.html
в –data прописывал “action=refresh&resumeId=***”
Попутно пребывал добавлять заголовки User-Agent, X-Requested-With.

После пытался проделать манипуляции с v3_popupApplicantActionRefreshResume.html, но проблема возникла в том, что последние значение при обновлении постоянно обновляется, т.е. стоит счетчик и он всегда получается уникальным, как его прописать не пойму.

http://www.rabota.ru/v3_popupApplicantActionRefreshResume.html?resumeId=***&_=****

Понимаю, что заморочился данной темой, но хочется довести всё до конца и  разобраться, какие всё -таки существуют пути решения.
Может, у кого имеется опыт решения или знает что можно предпринять?

P.S. В связи с ограничением ссылок для сообщения код запросов пришлось прикрепить файлом.

Прикреплённые файлы сообщения

Запрос.docx 18.31 kb, скачивалось 761 раз, начиная с 2016.10.06

16

Re: Авторизация на сайте HR

А не проще curl использовать?

17

Re: Авторизация на сайте HR

Про него речь. Проверяем идущие запросы, формируем свой через curl, но вот те самые проблемы и не позволяют пройти всё успешно. Всё идеально получилось только с superjob...

18

Re: Авторизация на сайте HR

Ну есть совсем радикальный способ: https://xakep.ru/2011/02/17/54728/ :)

Спасибо сказали: Dabdesco1

19

Re: Авторизация на сайте HR

Спасибо! Но оставим на крайний случай, т.к. не хочется сворачивать на полпути (как минимуму сохраняется интерес узнать решение в  curl ). Тем более, что новая программа может породить на своём уровне иные вопросы.
Ещё раз спасибо, что-то новое узнать для себя всегда полезно.

20 (2016.10.08 18:25:35 отредактировано Oompaloomp)

Re: Авторизация на сайте HR

Коллеги, доброго времени суток
во первых хотелось бы ещё раз поблагодарить уважаемого WendyH за его помощь в преодолении проблем возникших на тот момент времени.
Далее, над кодом и его дальнейшей оптимизацией, для авторизации и выполнения определенных действий запросами посредством curl, на тот момент времени работал несколько месяцев.
Представляю готовые решения которые работали в конце 2015 начале 2016 годов с того момента работоспособность не проверялась, итак:

+ SJ
echo off

:: ***************** Обновления резюме на SuperJob.ru **************

:: Устанавливаем переменные

set login=логин - заменить на свой
set passw=пароль - заменить на свой

:: Делаем запрос авторизации на сайт с указанием параметров для POST запроса

curl -L -c "cookies_sj.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "http://www.superjob.ru/user/login/" --data "returnUrl=http%%3A%%2F%%2Fwww.superjob.ru%%2F&LoginForm%%5Blogin%%5D=%login%&LoginForm%%5Bpassword%%5D=%passw%" >> answSJ.html

:: answSJ.html - этот файл проверки работоспособности запроса

:: Считываем построчно файл cookies_sj.txt
:: и заносим значения кук в переменные окружения по их именам

for /f "tokens=6,7 skip=3" %%G in (cookies_sj.txt) do set %%G=%%H

curl -L -b "cookies_sj.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" -x "socks5://localhost:9150" http://www.superjob.ru/user/resume/ >> reslistSJ.tmp

:: Получаем ID резюме которое будем обновлять

"\путь_к_файлу\sed.exe" -n "/update_datepub.html?id=/s/^.*\(update_datepub.html?id=[^\"]*\)\".*$/\1/p" reslistSJ.tmp >> reslist.sj

del "%~dp0*.tmp"

:: Обновляем резюме на SuperJob.ru
:: Эта проверка не помню для чего, но так работало =)

for %%i in ("reslist.sj") do (
  if %%~zi==0 (
   curl -L -b "cookies.sj" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" -x "socks5://localhost:9150" "http://www.superjob.ru/resume/update_datepub.html?id=%reg_user_cv%" >> update.ok
) else (
   for /f "tokens=1" %%x in ("reslist.sj") do (curl -L -b "cookies_sj.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" -x "socks5://localhost:9150" "http://www.superjob.ru/resume/%%x" >> upd_resumeSJ.html
        )

    )
)

:: ***************** Старый запрос обновления на всякий **************

:: curl -L -b "cookies_sj.txt" -c "cookies_sj.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "http://www.superjob.ru/resume/%m2%" >> upd_resumeSJ2.html

-x "socks5://localhost:9150" - параметр для анонимности можно опустить(должен быть запущен прокси с портом 9150)

+ Rabota
: ***************** Обновления резюме на Rabota.ru **************

:: Делаем запрос авторизации на сайт с указанием параметров для POST запроса

set login=логин - заменить на свой
set passw=пароль - заменить на свой

curl -L -c "cookies_rab.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "[url]http://www.rabota.ru/v3_login.html[/url]" --data "mail=%rLogin%&password=%rPassw%" >> answRab.html

curl -L -b "cookies_rab.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" [url]http://www.rabota.ru/?area=v3_resumeList[/url] >> reslistRAB.tmp

:: Получаем ID резюме которое будем обновлять
"\путь_к_файлу\sed.exe" -n "/resume_last_refresh/s/^.*\(resume_last_refresh[^\"]*\)\".*$/\1/p" reslistRAB.tmp >> reslist.rab
del "%~dp0*.tmp"

:: Теперь можно запрашивать личные страницы

for /f "UseBackQ tokens=1 Delims=resume_last_refresh_" %%x in (reslist.rab) do (curl -b "cookies_rab.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "[url]http://www.rabota.ru/v3_popupMyResumeExpires.html[/url]" -H "Accept: */*" -H "X-Requested-With: XMLHttpRequest" --data "action=refresh&resumeId=%%x" >> upd_resumeRab.html
)
+ HH
echo off

:: ***************** Обновления резюме на HeadHunter.ru **************

:: Делаем запрос страницы, чтобы получить куки в файл

curl -k -L -c "cookies_hh.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "https://hhid.ru/validate/;http;hh.ru;80;/" >> nul

:: Считываем построчно файл cookies_hh.txt
:: и заносим значения кук в переменные окружения по их именам

for /f "tokens=6,7 skip=3" %%G in (cookies_hh.txt) do set %%G=%%H

:: Теперь в переменной %_xsrf% у нас храниться значение кода

set login=ваш логин
set passw=ваш пароль

:: Делаем запрос авторизации на сайт с указанием параметров для POST запроса

curl -L -k -b "cookies_hh.txt" -c "cookies_hh.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "https://hh.ru/account/login" --data "username=%login%&password=%passw%&backUrl=http%%3A%%2F%%2Fhh.ru%%2F&action=%%D0%%92%%D0%%BE%%D0%%B9%%D1%%82%%D0%%B8&_xsrf=%_xsrf%" >> answHH.html

:: Получаем ID резюме которое будем обновлять

curl -L -k -b "cookies_hh.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "https://hh.ru/applicant/resumes" >> reslistHH.tmp

:: В сохраненном файле reslist.tmp ищем resume=.*
:: И все лишнее удаляем

"путь_к_файлу\sed.exe" -n "/resume=/s/^.*\(resume=[^\"]*\)\".*$/\1/p" reslistHH.tmp >> reslist.hh
del "%~dp0*.tmp"

:: Теперь можно запрашивать личные страницы
for /f "tokens=1" %%x in (reslist.hh) do (curl -L -k -b "cookies_hh.txt" -c "cookies_hh.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "https://hh.ru/applicant/resumes/touch" -H "X-Xsrftoken: %_xsrf%" --data "%%x&undirectable=true" >> upd_resumeHH.html
)
+ Job
echo off

:: ***************** Обновления резюме на Job.ru **************

set login=ваш логин
set passw=ваш пароль

:: Делаем запрос авторизации на сайт с указанием параметров для POST запроса

curl -L -c "cookies_job.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "http://www.job.ru/seeker/login/" --data "__LASTFOCUS=&__EVENTTARGET=ctl00%%24cpH%%24btLogin&__EVENTARGUMENT=&__VIEWSTATE=%%2FwEPDwULLTE2NDE0OTA4NDMPFgIeE1ZhbGlkYXRlUmVxdWVzdE1vZGUCARYCZg9kFgICAg9kFgICCw9kFgICAw9kFgJmD2QWAgICDxYCHgdWaXNpYmxlaGQYAgUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFGWN0bDAwJGNwSCRjYkRvTm90UmVtZW1iZXIFEWN0bDAwJGNwSCRtdkxvZ2luDw9kZmRlIZ8dshCJL6mrRyCmiO1Fs3X%%2Btg%%3D%%3D&ctl00%%24cpH%%24tbEmail=%login%&ctl00%%24cpH%%24tbPassword=%passw%" >> answJOB.html

curl -b "cookies_job.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "http://www.job.ru/seeker/user/cv/" >> reslistJOB.tmp

:: Получаем ID резюме которое будем обновлять

"\путь_к_файлу\sed.exe" -n "/cv=/s/^.*\(cv=[^\"]*\)\".*$/\1/p" reslistJOB.tmp >> reslist.job
del "%~dp0*.tmp"

:: Обновляем резюме на Job.ru

for /f "UseBackQ tokens=1 Delims=cv=" %%x in (reslist.job) do (curl -b "cookies_job.txt" -c "cookies_job.txt" -A "Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0" "http://www.job.ru/seeker/user/cv/ajax.ashx" --data "ahhc=TmeJobs.Web.Seeker.AjaxHandlers&ahhm=UpdateCv&ahass=TmeJobs.Web&ahargs=%%5B%%x%%5D&cache=1455608769139" >> updresJOB.html
)

значение в параметре --data нужно возвращать свое и не забывайте все % не относящиеся к переменным дублировать

LG 42LA644V/Philips 32PFL3605/60
Спасибо сказали: Dabdesco1

21

Re: Авторизация на сайте HR

Всем Здравствуйте!
Чрезвычайно благодарен Oompaloomp за информацию!
Со своей стороны в ближайшее время выложу решение, которые удалось получить на AutoIt (воспользовался всё-таки советом от d1mas  :) ) и  Python.

Ещё раз Спасибо Oompaloomp и d1mas !!!

22

Re: Авторизация на сайте HR

Всем здравствуйте!

Предлагаю решения, реализованные на AutoIt  и  Python.

+ AutoIt  -> SciTE  (для job)

#include <IE.au3>

call ("sinp")

Func sinp ()
Global $oIE = _IECreate ("http://www.job.ru/employer/login/",0,1,0,1)
Sleep(2000)

Local $username = _IEGetObjByName ($oIE, "ctl00$cpH$tbEmail")
Local $password = _IEGetObjByName ($oIE, "ctl00$cpH$tbPassword")

_IEFormElementSetValue ($username, "Ваш_логин")
_IEFormElementSetValue ($password, "Ваш_пароль")
Send("{Enter}")

Sleep(2000)

$oAs=_IETagNameGetCollection($oIE,'a')
For $oA In $oAs
    If $oA.classname = 'update_lnk enable' Then
        _IEAction($oA, 'click')
    EndIf
Next

EndFunc

По аналогии будет работать на rabota (стоит только заменить имена полей).
Примечание: чтобы сократить код и лишние действия  достаточно  предварительно через браузер  IE  авторизироваться ( принять при этом предложение сохранить пароль) и можно в коде сразу переходит к обновлению без авторизации. Аналогично поступаем с рекламой  (появляется на rabota при нажатии обновить).

+ Python3 (для hh)

import requests

a = ['Ваш_ID_1', 'Ваш_ID_2']

for elem in a:
    resume_id = elem
    access_token = 'Ваш_номер'
    url = 'https://api.hh.ru/resumes/'+resume_id+'/publish'
    headers ={'Authorization': 'Bearer '+access_token}

    r = requests.post(url, headers=headers)

Примечание: access_token берем отсюда  https://dev.hh.ru/admin

Проверил коды реализации на  curl + sed  от Oompaloomp :
1)  SuperJob – не получилось обновить, при том что reslist.sj заполнен корреткно!?
Примечание: в исходном коде закавычил http://www.superjob.ru/user/resume/ , иначе вызывало ошибку.

2) По всем остальным всё получилось. Правда для Job данная строка "__LASTFOCUS=&__EVENTTARGET …  не прошла, заменил на

"http://www.job.ru/employer/login/" --data "tbEmail=***&tbPassword=***"

В принципе ещё остается организовать запуск по расписанию, но эту реализацию  предлагаю следующим участникам. И главное, не забывайте делиться этим на форуме  ;D

Надеюсь, что размещенный материал кому-то будет полезен и сэкономит время.
Благодарю участников форума: Oompaloomp, WendyH и d1mas  за отклик и информацию!

Всем удачи и успехов!

Спасибо сказали: WendyH, Oompaloomp2

23

Re: Авторизация на сайте HR

Добрый день, уважаемые коллеги
на hh включини дополнительную защиту от "роботов" - www.google.com/recaptcha
Бьюсь 2й день, но пока не удается победить
При post запросе к:

curl - d "https://www.google.com/recaptcha/api2/reload?k=6Ld7XBgTAAAAABhqMs0avEPpilCq3w8FsocJLK_n"

k=6Ld7XBgTAAAAABhqMs0avEPpilCq3w8FsocJLK_n как я понял константа - ключ hh в сервисе recaptcha гугла
с заголовком

-H "Referer: https://perm.hh.ru/account/login?backurl=%2F&state=recaptcha-verification-failed&captcha=true"

получаю ответ:

+ ОШИБКА:неверный домен ключа

https://i.imgur.com/8kUgqB1.png

Дальше в решении продвинуться не удается, прошу помочь

LG 42LA644V/Philips 32PFL3605/60

24

Re: Авторизация на сайте HR

Oompaloomp пишет:

Добрый день, уважаемые коллеги
на hh включини дополнительную защиту от "роботов" - www.google.com/recaptcha
Бьюсь 2й день, но пока не удается победить

И не победите. Как бы для этого она и нужна, чтобы программно было невозможно авторизоваться без участия человека.

Другое дело, что она включается обычно при частых или неверных запросах. И включается на время. Т.е. при обычных обстоятельствах её (защиты капчей) там быть не должно.

Sony Bravia KDL-32CX523

25

Re: Авторизация на сайте HR

WendyH пишет:

И не победите. Как бы для этого она и нужна, чтобы программно было невозможно авторизоваться без участия человека.

Другое дело, что она включается обычно при частых или неверных запросах. И включается на время. Т.е. при обычных обстоятельствах её (защиты капчей) там быть не должно.

WendyH, спасибо за оперативный ответ
вас понял,
я в запросе использую прокси на всякий так сказать, попробую без него.

LG 42LA644V/Philips 32PFL3605/60

26

Re: Авторизация на сайте HR

WendyH пишет:

И не победите. Как бы для этого она и нужна, чтобы программно было невозможно авторизоваться без участия человека.

Другое дело, что она включается обычно при частых или неверных запросах. И включается на время. Т.е. при обычных обстоятельствах её (защиты капчей) там быть не должно.

Попробовал без прокси, всё равно авторизация упирается в капчу.
Если в браузере в этом же сеансе выйти из лк и снова авторизоваться тоже появляется гугло-капча.

LG 42LA644V/Philips 32PFL3605/60

27

Re: Авторизация на сайте HR

Доброго времени суток.
Разлогинился. Очистил в браузере куки hh. Затем зашел на hh.
Обнаружил кукус именем gibbtrn58 и значением %7B%22alerts%22%3A%5B76%2C77%5D%2C%22bot%22%3A0%7D, или по человечески {"alerts":[76,77],"bot":0}
bot:0 - это не то, о чем я подумал?

28 (2018.11.20 23:49:12 отредактировано Oompaloomp)

Re: Авторизация на сайте HR

Интересно)
запустил старый скрипт, авторизовался, получил список резюме, капчи нет
UPD
Резюме обновилось

LG 42LA644V/Philips 32PFL3605/60

29

Re: Авторизация на сайте HR

Друзья, назрел вопрос. По какому списку адресов нужно пройти курлами, чтобы собрать достаточное количество кук и пройти авторизацию?
Запрос на адрес "http://hhid.ru/validate/;http;hh.ru;80;/" возвращает 404 ошибку.

30

Re: Авторизация на сайте HR

Запрос на "https://hh.ru/" работает и устанавливает некоторые куки.
Запрос на "https://hh.ru/api/fl/id58" работает, но не устанавливает никакие куки. Хотя в браузере вижу, что запрос на этот адрес делает Set-Cookie. Ответ возвращается такой: {"status":"success","error":null,"data":{"cfids":"","clsc":null,"bid":1803102051}}