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) и извлеките поля формы перед отправкой.