Python Requests - Вставка учетных данных в качестве переменных в FORM_DATA

Я пытаюсь предложить пользователю ввести имя пользователя и пароль для входа на сайт. Мой план состоит в том, чтобы использовать запросы для отправки данных POST. Вот код, который у меня есть:

import requests
import getpass

uname = raw_input("Username: ")
passw = getpass.getpass(prompt = "Password: ")

FORM_DATA = {
"__EVENTTARGET:",
"__EVENTARGUMENT:",
"__VIEWSTATE:/wEPDwUKMTA5NTA5ODU1MQ9kFgJmD2QWAgIGDxBkDxYFZgIBAgICAwIEF***REMAINDER REMOVED***",
"__EVENTVALIDATION:/wEdAAp4d3BHvSTs+Kv6cxGP3xEbBr8xrgRYad2tj4YCyRIw5qUAjimf****REMAINDER REMOVED****",
"jsCheck:",
"ddlEngine: REMOVED:13008",
"Username: %(uname)s" ,
"Password: %(passw)s",
"btnLogin.x: 42",
"btnLogin.y: 9",
"btnLogin: Login",
}

print FORM_DATA

Это, очевидно, только часть данных POST, но я хочу убедиться, что учетные данные передаются в первую очередь, прежде чем двигаться вперед. Использование печати не показывает, что ввод был вставлен в определенные места.

1 ответ

Решение

Данные POST из формы - это просто серия пар ключ-значение. Поскольку все ключи уникальны, просто используйте словарь, чтобы представить их:

FORM_DATA = {
    '__EVENTTARGET': '',
    '__EVENTARGUMENT': '',
    '__VIEWSTATE': '/wEPDwUKMTA5NTA5ODU1MQ9kFgJmD2QWAgIGDxBkDxYFZgIBAgICAwIEF***REMAINDER REMOVED***',
    '__EVENTVALIDATION': '/wEdAAp4d3BHvSTs+Kv6cxGP3xEbBr8xrgRYad2tj4YCyRIw5qUAjimf****REMAINDER REMOVED****',
    'jsCheck': '',
    'ddlEngine': 'REMOVED:13008',
    'Username': uname,
    'Password': passw,
    'btnLogin.x': '42',
    'btnLogin.y': '9',
    'btnLogin': 'Login',
}

с пустыми значениями, представленными пустыми строками.

btnLogin.x а также btnLogin.y ключи обычно просто игнорируются сервером; они общаются, где вы нажали на кнопку изображения. Вы можете просто установить имя пользователя и пароль прямо из uname а также passw переменные, которые вы уже установили.

Затем используйте этот словарь как data ключевое слово для requests.post() вызов.

Возможно, сервер ожидает, что cookie вернется назад, установленный при начальной загрузке формы. В этом случае объект Session и вызов .get() а также .post() на что.

Может быть, что __VIEWSTATE а также __EVENTVALIDATION ключи устанавливаются динамически при первом создании формы, вам нужно загрузить ее с requests.get()проанализируйте HTML (используя, скажем, BeautifulSoup) и извлеките поля формы перед отправкой.

Другие вопросы по тегам