Задать вопрос
@R4ndolphC4rter

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

Добрый день!

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

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

Реализация 2:
Результат ( при вводе верных/неверных данных):
'https://www.netflix.com/Login?nextpage=https%3A%2F...'
Ожидаемый результат (при верных данных):
'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%3D%3D; memclid=56a08146-0c8d-4804-a0fd-b4f260fa97c7; NetflixId=v%3D2%26ct%3DBQAOAAEBEPWqAdwhDzT9fGigJ17MprOA8HnnmJwbPXxVXQU6l7-AoAf0CdmoJ4OKFuXNmN_Gk1VSxDTfOlR5l6vTdpv2E5uDgM_-TOYTDJUAn6dasLtySfwFb36rx9zlcFZXd2V4ev_Phv7xeXEiIHg2-07r9D_-lk1mOvi0vrkA4Ks0fDdZPUKNzxSv6I9wG1JTy6VgQJWgmHohn0pZllDVFPTgtK7w80Z6zk8HpsS2NhHVN5fFtpDltPxcyhgvpSKoubPjI34tHyi5mdZ4wFWS5Fr-M9mSften3mCFSEbbD60owhL0UqJSTgqj0fEMcvWTHOHyrmMh2mNsnULZLssEAX8nLODtEg..%26bt%3Ddev%26mac%3DAQEAEAABABRtx6338QBfcQqapPEDcdramTVeKrC8MEo.; SecureNetflixId=v%3D2%27mac%3DAQEAEQABABSZexlJGSn3i-7avPfXiwl-aToM9mLR0Js.%26dt%3D1563037431438; flwssn=e448dd2d-4808-4bde-ac20-d2c32f5fc16d; clSharedContext=698074de-40c7-48a6-bf24-2738230a2f51; hasSeenCookieDisclosure=true; didUserInteractWithPage=true; dsca=anonymous; cL=1563038693194%7C156303869337943053%7C156303869386624258%7C%7C4%7Cnull",
    "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.2019
Утро доброе! Продолжим... Сегодня попробую покопать в сторону cookies.
За этот день я ничего толкового не сделал, сегодня я наслаждался сериалами.

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

Вопрос:
Так как же мне реализовать авторизацию, при этом, желательно, возвращая True/False?
  • Вопрос задан
  • 9870 просмотров
Подписаться 1 Средний 4 комментария
Решения вопроса 1
@R4ndolphC4rter Автор вопроса
ВСЕМ СПАСИБО! ВОПРОС ЗАКРЫТ.
r1 = s.post(URL_LOG, data=data, headers=headers)
URL_LOG - константа.
data - словарь, динамичными значениями которого являются login & password, authURL.
headers - словарь, динамичным значением (текстовой переменной) которого является cookies.
Все остальные элементы словарей являются статичными и вытащены прямиком с сайта через консоль разработчика.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Messiah_v2
На сколько мне известно при любой авторизации выдается некий токен, который требуется записать в куки сессии.
Проследите авторизацию трассировкой в браузере. Посмотрите куки до и после авторизации. Думаю ответ лежит там
Ответ написан
nastya_cyxarik
@nastya_cyxarik
php, python dev
selenium не пробовали?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы