Я пытаюсь использовать библиотеку запросов python для очистки сайта ASPX и получения информации из таблицы внутри.
Проблема, с которой я сталкиваюсь, также была хорошо описана в Как удалить веб-страницу ASPX, требующую аутентификации без ответов на момент написания.
Способ, которым я сейчас занимаюсь, заключается в следующем:
- создание сеанса запросов,
- получение заголовка запроса.
- Информация, полученная из запроса на получение, анализируется с помощью BeautifulSoup.
Установка всех параметров в словарь login_data.
headers={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36"}
with requests.session() as session:
session.headers.update(headers)
response=session.get(login_url)
soup=BeautifulSoup(response.content)
VIEWSTATE = soup.find(id="__VIEWSTATE")['value']
VIEWSTATEGENERATOR = soup.find(id="__VIEWSTATEGENERATOR")['value']
EVENTVALIDATION = soup.find(id="__EVENTVALIDATION")['value']
EVENTTARGET = soup.find(id="__EVENTTARGET")['value']
EVENTARGUEMENT = soup.find(id="__EVENTARGUMENT")['value']
PREVIOUSPAGE = soup.find(id="__PREVIOUSPAGE")['value']
CMSESSIONID = soup.find(id="CMSessionId")['value']
soup.find(id="MasterHeaderPlaceHolder_ctl00_userNameTextbox")['value']
login_data= {
"__VIEWSTATE" : VIEWSTATE,
"txtUserName" : account_name,
"txtPassword" : account_pass,
"__VIEWSTATEGENERATOR" : VIEWSTATEGENERATOR,
"__EVENTVALIDATION": EVENTVALIDATION,
"__EVENTTARGET" : EVENTTARGET,
"__EVENTARGUEMENT" : EVENTARGUEMENT,
"__PREVIOUSPAGE" : PREVIOUSPAGE,
"CMSessionId" : CMSESSIONID,
"MasterHeaderPlaceHolder_ctl00_userNameTextbox" : account_name,
"MasterHeaderPlaceHolder_ctl00_passwordTextbox" : account_pass,
"MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox" : account_pass
}
login_data_encoded = urllib.parse.urlencode(login_data) #*
В дополнение к этому, словарь login_data передается на запрос post в login_url в качестве данных.
Затем используется тот же сеанс, чтобы попытаться получить запрос от report_url.
response_1 = session.post(login_url, data=login_data)
response_2 = session.get(report_url)
Проблема заключается в том, что вход в систему не выполняется.поскольку запрос get перенаправляется на страницу входа.
Кто-нибудь может пролить свет на то, почему это так?Я предполагаю, что это правильный поток, однако, пожалуйста, дайте мне знать, если что-то я делаю неправильно или это можно улучшить.
К сожалению, в настоящее время я ограничен использованием только запросов или других популярных библиотек Python 3, поскольку это является обязательным требованием (использование ссылок на файлы "browser" .exe, как предлагается в некоторых ответах на эту тему, не вариант.)