Problemas con las solicitudes / sopa hermosa

Estoy tratando de aprender a usar algunas de las funciones web de Python, y pensé que practicaría escribiendo un guión para iniciar sesión en una página web de mi universidad. Inicialmente escribí el código usando urllib2 , pero el usuario alecxe amablemente me proporcionó un código usando requests/BeautifulSoup (consulte: inicio de sesión del sitio web usando Python urllib2 )

Estoy intentando iniciar sesión en la página http://reg.maths.lth.se/ . La página presenta un formulario de inicio de sesión para estudiantes y otro para profesores (obviamente estoy intentando iniciar sesión como estudiante). Para iniciar sesión, debe proporcionar un “Personnummer” que es básicamente el equivalente a un número de seguridad social, por lo que no quiero publicar mi número válido. Sin embargo, puedo revelar que debe tener 10 dígitos de longitud.

El código que me proporcionaron (con un pequeño cambio en la statement de impresión final) se proporciona a continuación:

 import requests from bs4 import BeautifulSoup PNR = "00000000" url = "http://reg.maths.lth.se/" login_url = "http://reg.maths.lth.se/login/student" with requests.Session() as session: # extract token response = session.get(url) soup = BeautifulSoup(response.content, "html.parser") token = soup.find("input", {"name": "_token"})["value"] # submit form session.post(login_url, data={ "_token": token, "pnr": PNR }) # navigate to the main page again (should be logged in) #response = session.get(url) ##This is deliberately commented out soup = BeautifulSoup(response.content, "html.parser") print(soup) 

Por lo tanto, se supone que debe imprimir el código fuente de la página obtenida después de POSTing the pnr.

Mientras se ejecuta el código, siempre devuelve el código fuente de la página principal http://reg.maths.lth.se/ que no es correcto. Por ejemplo, si intenta ingresar manualmente un pnr de la longitud incorrecta, es decir, 0, debe dirigirse a una página que se parece a esto:

introduzca la descripción de la imagen aquí ubicado en la url http://reg.maths.lth.se/login/student cuyo código fuente es obviamente diferente al de la página principal.

¿Alguna sugerencia?

No está asignando el resultado POST a la response , y solo está imprimiendo el resultado de la primera solicitud GET.

Asi que,

 # submit form session.post(login_url, data={ "_token": token, "pnr": PNR }) 

debiera ser

 response = session.post(login_url, data={ "_token": token, "pnr": PNR })