Очистка страницы ASPX с аутентификацией.Использование Python 3 - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь использовать библиотеку запросов 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, как предлагается в некоторых ответах на эту тему, не вариант.)

...