Добрый день!
Моя цель:
Написать программу на 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?