Python Requests Как авторизоваться на сайте? — Хабр Q&A

How can i login to a website with python?

Websites in general can check authorization in many different ways, but the one you’re targeting seems to make it reasonably easy for you.

All you need is to POST to the auth/login URL a form-encoded blob with the various fields you see there (forget the labels for, they’re decoration for human visitors). handle=whatever&password-clear=pwd and so on, as long as you know the values for the handle (AKA email) and password you should be fine.

Presumably that POST will redirect you to some “you’ve successfully logged in” page with a Set-Cookie header validating your session (be sure to save that cookie and send it back on further interaction along the session!).

Python requests как авторизоваться на сайте?

Добрый день!

Моя цель:
Написать программу на python. На вход подаются данные login и password, на выход подаётся ответ True/False (зависит, соответственно, от того, смогла ли программа выполнить вход).
Авторизация проходит на сайте Netflix, это моя задача.

Реализация 1:
Для начала решил написать код, результатом выполнения которого являлся print(r.text). Как я понимаю, при вводе правильных и неправильных логина и пароля результаты ( print(r.text) ) должны отличаться, но у меня они одинаковые.
КОД УДАЛЁН

Реализация 2:
Результат ( при вводе верных/неверных данных):
https://www.netflix.com/Login?nextpage=https:/…
Ожидаемый результат (при верных данных):
https://www.netflix.com/browse
КОД УДАЛЁН

13.07.19
Начался 3 день моих мучений, держу в курсе…
19:55, я вернулся со школы, продолжаю тщетные попытки.
Мои планы? Собираюсь отправлять post запрос, а затем отправлять get запрос, пытаясь получить доступ к https://www.netflix.com/browse (страница, к который нельзя получить доступ не авторизовавшись).

r1 = requests.post(URL_LOG, data=data, headers=headers)

Пытаюсь вникнуть в чужие коды, откуда они берут данные для словаря – мне не известно. (Откуда я взял данные для словаря headers? Скопировал с чужого кода (а их было несколько), увы, они больше не работают). Тайное расследование какое-то. Пойду читать литературу, гляди с сотого раза вникну.

После многочисленных запросов на сервер, Netflix временно заблокировали мой ip. Скачал на компьютер VPN. Где я сегодня не побывал! Канада, Германия, США, Франция, Норвегия и множество других мест. продолжаю мучиться… Потому что на мой get запрос по адресу https://www.netflix.com/browse возвращается url=https://www.netflix.com/login (как будто я не авторизовался, но логин и пароль-то верные!).

Код на текущий момент (13.07.19 21:14) aka Реализация 3:

import requests
from lxml import html, etree

URL_LOG = "https://www.netflix.com/login"
URL_MAIN = "https://www.netflix.com/browse"
LOGIN = "MY_LOGIN"
PASSWORD = "MY_PASSWORD"

s = requests.Session()

headers = {
    "Accept": "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    "Connection": "keep-alive",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
}

result = requests.get(URL_LOG, headers=headers)
tree = html.fromstring(result.text)
authURL = list(set(tree.xpath("//input[@name='authURL']/@value")))[0]

print(authURL)

headers = {
    "Accept": "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    "Cache-Control": "max-age=0",
    "Connection": "keep-alive",
    "Content-Length": "313",
    "Content-Type": "application/x-www-form-urlencoded",
    #"Cookie": "nfvdid=BQFnAAEBEJxbF-N0cMOnfTmUxgT9zsZA_s_RaJ0fg2fV7bXcmlV1-6TTVTaw_1F85KjMtVuQwen50FFpoxN3UajeIhJKq3kGbTUYskxDNoUqSXEKjXzO5Q==; memclid=56a08146-0c8d-4804-a0fd-b4f260fa97c7; NetflixId=v=2&ct=BQAOAAEBEPWqAdwhDzT9fGigJ17MprOA8HnnmJwbPXxVXQU6l7-AoAf0CdmoJ4OKFuXNmN_Gk1VSxDTfOlR5l6vTdpv2E5uDgM_-TOYTDJUAn6dasLtySfwFb36rx9zlcFZXd2V4ev_Phv7xeXEiIHg2-07r9D_-lk1mOvi0vrkA4Ks0fDdZPUKNzxSv6I9wG1JTy6VgQJWgmHohn0pZllDVFPTgtK7w80Z6zk8HpsS2NhHVN5fFtpDltPxcyhgvpSKoubPjI34tHyi5mdZ4wFWS5Fr-M9mSften3mCFSEbbD60owhL0UqJSTgqj0fEMcvWTHOHyrmMh2mNsnULZLssEAX8nLODtEg..&bt=dev&mac=AQEAEAABABRtx6338QBfcQqapPEDcdramTVeKrC8MEo.; SecureNetflixId=v=2'mac=AQEAEQABABSZexlJGSn3i-7avPfXiwl-aToM9mLR0Js.&dt=1563037431438; flwssn=e448dd2d-4808-4bde-ac20-d2c32f5fc16d; clSharedContext=698074de-40c7-48a6-bf24-2738230a2f51; hasSeenCookieDisclosure=true; didUserInteractWithPage=true; dsca=anonymous; cL=1563038693194|156303869337943053|156303869386624258||4|null",
    "Host": "www.netflix.com",
    "Origin": "https://www.netflix.com",
    "Referer": "https://www.netflix.com/login",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
}

data = {
    "userLoginId": LOGIN,
    "password": PASSWORD,
    "rememberMe": "true",
    "flow": "websiteSignUp",
    "mode": "login",
    "action": "loginAction",
    "withFields": "rememberMe,nextPage,userLoginId,password,countryCode,countryIsoCode",
    "authURL": authURL,
    "nextPage": "",
    "showPassword": "",
    #"countryCode": " 49",
    #"countryIsoCode": "DE"
}

r1 = s.post(URL_LOG, data=data, headers=headers)
r2 = s.get(URL_MAIN)

print(r1.url)
print(r2.url)

От перестановки слагаемых, так сказать…
На мой get запрос вместо ожидаемой ссылки возвращается (уже будоражащая мои не очень ясные очи) ссылка на страницу авторизации.
23:28 – Завтра продолжу биться об стену, на сегодня, пожалуй, хватит.

14.07.2022
Утро доброе! Продолжим… Сегодня попробую покопать в сторону cookies.
За этот день я ничего толкового не сделал, сегодня я наслаждался сериалами.

15.07.2022
Сегодня снова без каких-либо результатов, НО я дождался ответов, которые берусь обдумывать и изучать.
Места для последующих комментариев не хватает (максимум 10 тыс. символов). Приходится удалять коды Реализаций 1 и 2. Ничего страшного, в них всё равно не было ничего интересного.
ОХ ЧЁРТ! СДЕЛАЛ!!! РАБОТАЕТ! 15.07.2022 23:29 Теперь бегом дорабатывать, попытаюсь встроить proxy.

Вопрос:
Так как же мне реализовать авторизацию, при этом, желательно, возвращая True/False?

Success_login.txt

{'result': False, 'message': 'Необходимо пройти проверку "Я не робот"', 'data': None}

Авторизация на сайте через requests python3

Прошу помощи в написании куска кода с авторизацией на сайте https://binomo.com средствами requests python3. Знаю что надо найти post запрос отправляемый браузером при авторизации, но вот его то я и не могу найти. Смотрю через средства разработчика в Firefox и Opera. Пока имею следующее:

import requests

data = {'email':'[email protected]', 'password':'111111'}
login = "[email protected]"#логин
pass_ = "1111111"#пароль
Url = "https://binomo.com/ru/account"#ссылка на сайт
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:45.0) Gecko/20220101 Firefox/45.0'}#эмитация живого пользователя
r = requests.get(Url,  headers = headers, data = data)#отправка запроса на сайт
print(r.status_code)

session = requests.Session()
respons = session.get(Url, data=data, headers=headers)
print(respons.status_code)

res = requests.post("https://binomo.com/api/profile?device=web&locale=ru", headers = headers, data = data)
print(res.text)
print(res)

это мой первый опыт в этом направлении, прошу не пинать!))

Авторизуемся на сайте

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

Для чего и где мы можем применять requests?

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

Как авторизоваться на сайте со всплывающим окном авторизации?

Вам следует посмотреть, какие нужно передать значения методом POST. Если Вы открываете в браузере Google Chrome, то нажмите F12, или Просмотреть код. Затем перейдите во вкладку Network и авторизуйтесь на сайте. После авторизации нажмите на файл в таблице Name слева (чаще всего это самый первый файл, он может называться login/). Прокрутите до самого низа и найдите блок Form Data. Здесь вы можете найти все данные, которые следует передать, чтобы успешно авторизоваться на сайте, там же есть и уникальный токен о котором вы спрашивали в другом ответе.

В примере ниже значения взяты для сайта https://www.pythonanywhere.com/ (вы же должны передать те, которые есть в блоке Form Data)

...
data = {
        'csrfmiddlewaretoken': session.cookies.get('csrftoken'), 
        'auth-username': 'your_login', 
        'auth-password': 'your_password', 
        'login_view-current_step': 'auth'
}

session.headers.update({'Referer': url})
post_request = session.post(url, data=data)
... 

Плюс ко всему можете открыть файл hh_success.html (находится в той же директории, где и .py скрипт) и посмотреть его содержимое, корректно ли авторизовались и тд…

Примеры использования библиотеки requests

Для работы с примерами мы будем использовать два способа: работа в командной строке и написание скриптов в .py-файлах для их дальнейшего запуска.

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

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

$ pip install requests 

Продолжим использовать консоль. После установки в нашем расположении (у меня это диск D) введем команду:

D:> python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2022, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

Теперь можем проверить установку библиотеки произведя импорт:

>>> import requests 

Скачаем изображение с сайта

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

Узнаем погоду в москве

В этом примере мы будем использовать API KEY с сайта WorldWeatherOnline, на котором мы зарегистрировались в прошлом примере. В разделе документации на сайте WorldWeatherOnline приведено подробное описание параметров.

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

Создадим файл и назовём его weather.py. Запишем в него:

Похожее:  Смс авторизация на сайте (регистрация через смс) или генератор паролей для смс, восстановление пароля по смс

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *