#python #python-requests
#python #python-запросы
Вопрос:
Я пытаюсь зачитать некоторые из моих статистических данных из chess.com . Я изо всех сил пытаюсь войти в систему с помощью python.
Я пытаюсь следовать приведенному здесь руководству
Я определил следующие теги на странице входа в систему. _username
как имя пользователя, _password
как пароль и _token
как скрытый токен.
Мой код:
session_requests = requests.session()
login_url = 'https://www.chess.com/login'
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
token = list(set(tree.xpath("//input[@name='_token']/@value")))[0]
payload = {
"_username": "ChristianSloper",
"_password": "mypasswordgoeshere",
"_token": token
}
result = session_requests.post( login_url, data = payload, headers = dict(referer=login_url), verify=True)
К сожалению, меня просто отсылают обратно на страницу входа в систему. Я очень новичок в front end / web и был бы очень рад любой помощи.
Комментарии:
1. Просто следите за успешным получением страницы входа в систему, затем отправляйте сообщение для входа в систему — как это делает пользователь с помощью браузера, а затем реплицируйте то, что отправляется на POST. Использование сеанса запросов гарантирует обработку файлов cookie, вам необходимо убедиться, что заголовки, отправленные в сообщении, совпадают / неотличимы от того, что отправляет браузер. Используйте шпионское приложение, такое как бесплатный и отличный Telerik Fiddler.
2. Возможно, что вход в систему всегда будет завершаться неудачно, если клиент не выглядит как браузер.
3. Спасибо за совет @barny. Я не смог ничего прочитать из Telerik, все это кажется зашифрованным. (или я мог бы использовать Fiddler неправильно, так как я не использовал его раньше :-))
4. Вы заходите в Настройки скрипача и настраиваете https — он становится прокси (человек посередине), расшифровывающим сообщение. Конечно, вы должны принять сертификат Скрипача в браузере. Но тогда вы видите все сообщения — заголовки, содержимое. Fiddler неоценим для мониторинга взаимодействия браузера <> с сервером.
Ответ №1:
ваши полезные данные не совсем корректны (в нем не хватает нескольких вещей), и похоже, что вы отправляете запрос POST на неправильный URL, попробуйте этот код:
session_requests = requests.session()
login_url = 'https://www.chess.com/login'
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
token = list(set(tree.xpath("//input[@name='_token']/@value")))[0]
payload={"_username": "ChristianSloper",
"_password": "mypasswordgoeshere",
"login": '',
"_target_path": "https://www.chess.com/home",
"_token": token
}
session_requests.headers.update(dict(referer=login_url))
result = session_requests.post("https://www.chess.com:443/login_check", data = payload, verify=True)
Надеюсь, это поможет!