Форум сайта python.su
Добрый день!
Уже месяц ломаю голову над авторизацией на одном ресурсе, не пойму почему у меня не получается.
Итак, я пробовал делать это с помощью Реквеста, но не особо получается, вроде все делаю правильно,
и данные какие нужно отправляю, но все безуспешно. Единственное как у меня получилось пройти авторизацию так это с помощью selenium webdriver, но в нем мне ,пока, еще сложнее разобраться, так что хотелось бы использовать реквестс, да и скорость с ним выше.
Скажу сразу, обковырял весь гугл, смотрел кучу видео, прочитал Web Scraping with Python изд. O'reilly, Но, она не особо мне помогла в этом вопросе.
Возможно, есть совет по какой нибудь литературе, которая придется к месту.
Вот код:
import requests from bs4 import BeautifulSoup as soup # from pathlib import Path GB = 'https://geekbrains.ru' LOGIN_URL = 'https://geekbrains.ru/login' CPT = 'https://geekbrains.ru/wanna_captcha' with requests.Session() as session: r = session.get(GB) print(f'Code for {GB} is :', r.status_code) soup = soup(r.text, 'lxml') token = soup.select_one('[name="authenticity_token"]')['value'] #str class user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36' r = session.post(CPT, data = {'user[email]': 'mail', 'user[password]': 'pass', 'authenticity_token' : token, 'utf8': 'true', 'user[remember_me]': '0', 'user-agent': user_agent}) cpt = session.get(CPT) log_url = session.get(LOGIN_URL) print(f'Code for {CPT} is :', cpt.status_code) print(f'Code for {LOGIN_URL} is :', log_url.status_code)
Отредактировано Panzershracker (Дек. 10, 2018 17:06:14)
Офлайн
Panzershrackerкхм… капча…302.. Наверное кто то хочет что бы вы подтвердили что вы не от бездушный?
После логина есть промежуточная страница /wanna_captcha, код ответа которой 302
Офлайн
JOHN_16
Офлайн
Видимо, после одного сомнительного ответа помощь закончилась)
Офлайн
Panzershracker
ну ладно вам..
вот вы на страницу /wanna_captcha переходили? Мне просто не понятно насколько вы хорошо понимаете то что делаете.
P.S. если вы пишите бота как именно вы собрались капчу обходить?
Офлайн
JOHN_16
Panzershrackerну ладно вам..вот вы на страницу /wanna_captcha переходили? Мне просто не понятно насколько вы хорошо понимаете то что делаете.P.S. если вы пишите бота как именно вы собрались капчу обходить?
Прикреплённый файлы: 404.jpg (156,7 KБ)
Офлайн
ну нет, не повторная отправка формы, а подтверждения чт овы человек, для предотвращения программного захода.
Вообще стандартный алгоритм такой
заходите на страницу авторизации, посылаете POST (обычно) запрос с данными формы.
В ответе вам приходит какой нибудь либо все ок и перенаправление на страницу уже в статусе атворизированого пользователя, либо хотим капчу и перенаправление на страницу с капчей.
На странице с капчей форма поля которой (включая скрытые) отправляются POST запросом и уже по этому результату либ все ок и перенаправление на страницу либо не ок.
КОнкретная реализация этого алгоритма, как вы можете догадаться, различается от сайта к сайту.
Офлайн
import requests from bs4 import BeautifulSoup as soup from urllib.parse import urljoin with requests.Session() as session: session.headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' session.headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0' resp = session.get('https://geekbrains.ru/login') auth_token = soup(resp.text, 'lxml').select_one('input[name="authenticity_token"]')['value'] resp = session.post( 'https://geekbrains.ru/wanna_captcha', data={ 'user[email]': '', 'user[password]': '', 'user[remember_me]': 0, 'authenticity_token': auth_token, 'utf8': '✓' } ) url_user_profile = soup(resp.text, 'lxml').select_one('li.gb-top-menu__item.dropdown > a')['href'] resp = session.get(urljoin('https://geekbrains.ru', url_user_profile)) user_name = soup(resp.text, 'lxml').select_one('div.user-info > div > span').text print('Logged as', user_name)
Офлайн
JOHN_16
ну нет, не повторная отправка формы, а подтверждения чт овы человек, для предотвращения программного захода.Вообще стандартный алгоритм такойзаходите на страницу авторизации, посылаете POST (обычно) запрос с данными формы.В ответе вам приходит какой нибудь либо все ок и перенаправление на страницу уже в статусе атворизированого пользователя, либо хотим капчу и перенаправление на страницу с капчей.На странице с капчей форма поля которой (включая скрытые) отправляются POST запросом и уже по этому результату либ все ок и перенаправление на страницу либо не ок.КОнкретная реализация этого алгоритма, как вы можете догадаться, различается от сайта к сайту.
aiscyОДНАКО!!! Спасибо!
Отредактировано Panzershracker (Дек. 13, 2018 17:44:37)
Офлайн