Вход в Python для chess.com с просьбами

#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)
 

Надеюсь, это поможет!