So verschrotten Sie eine ASPX-Seite, für die eine Authentifizierung erforderlich ist

Mit der Python-Bibliothek "Requests" versuche ich, eine ASPX-Site über das Web zu scrappen https: //cei.bmfbovespa.com.br/CEI_Responsivo/home.asp), für das zuerst ein Login erforderlich ist https: //cei.bmfbovespa.com.br/CEI_Responsivo/login.asp).

Hier sind die Schritte, die ich versuche zu tun:

Erstelle eine Sitzung mit 'Requests', um die Cookies zu verarbeiten (stimmt das?)Aktualisieren Sie den Header mit allen Informationen, die ich von "Request Header" mit Chrome Developing Tool erhalten habe (mit Ausnahme der Cookie-Informationen aufgrund der Sitzung). Führen Sie auf der Anmeldeseite ein GET aus, um die Eingabewerte für den POST @ zu erhaltePOS

Wenn ich dies manuell mit Chrome mache, erhalte ich nach erfolgreicher Anmeldung eine Antwort '302' und werde zur Startseite weitergeleitet. Aber mit Python habe ich nach dem POST eine Antwort von '200' erhalten und bin immer noch auf der Anmeldeseite.

import requests
from bs4 import BeautifulSoup
from requests.packages.urllib3 import add_stderr_logger

add_stderr_logger()

s = requests.Session()

url_login = 'https://cei.bmfbovespa.com.br/CEI_Responsivo/login.aspx'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36',
    'Upgrade-Insecure-Requests':'1',
    'Host':'cei.bmfbovespa.com.br',
    'Connection':'keep-alive',
    'Accept-Language':'pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4',
    'Accept-Encoding':'gzip, deflate, sdch',
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
}
s.headers.update(headers)

r = s.get(url_login, verify=False)
soup = BeautifulSoup(r.content)

viewstate = soup.find(id="__VIEWSTATE")['value']
viewgen = soup.find(id="__VIEWSTATEGENERATOR")['value']
eventvalid = soup.find(id="__EVENTVALIDATION")['value']

login_data = {          
        '__VIEWSTATE' : viewstate,
        '__VIEWSTATEGENERATOR' : viewgen,
        '__EVENTVALIDATION' : eventvalid,
        'ctl00$ContentPlaceHolder1$txtLogin' : '*',
        'ctl00$ContentPlaceHolder1$txtSenha' : '*',
        'tl00$ContentPlaceHolder1$btnLogar': 'Entrar'
}

resp = s.post(url_login, data=login_data, verify=False)

Wenn ich immer noch versuche, mit der Sitzung ein GET durchzuführen, werde ich zur Anmeldeseite weitergeleitet:

url_carteira = 'https://cei.bmfbovespa.com.br/CEI_Responsivo/home.aspx'
response = s.get(url_carteira, verify=False)

Und das ist die Ausgabe, die ich erhalte:

2016-02-11 22:07:07,476 INFO Starting new HTTPS connection (1): cei.bmfbovespa.com.br
2016-02-11 22:07:07,823 DEBUG "GET /CEI_Responsivo/login.aspx HTTP/1.1" 200 4522
2016-02-11 22:07:07,898 DEBUG "POST /CEI_Responsivo/login.aspx HTTP/1.1" 200 4534
C:\Users\luciano\AppData\Local\Programs\Python\Python35\lib\site-packages\requests\packages\urllib3\connectionpool.py:791: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
2016-02-11 22:07:10,470 DEBUG "GET /CEI_Responsivo/home.aspx HTTP/1.1" 302 147
2016-02-11 22:07:10,510 DEBUG "GET /CEI_Responsivo/login.aspx HTTP/1.1" 200 4522

Ich verwende Python 3.5.1

Bitte wissen Sie, warum ich mich nicht erfolgreich anmelden und auf die Startseite zugreifen kann?

Antworten auf die Frage(0)

Ihre Antwort auf die Frage