tutorial requests ejemplo close biblioteca auth python login python-requests

ejemplo - Iniciando sesión usando Python''s Requests



request python tutorial (1)

Intento iniciar sesión en un sitio web usando Solicitudes y parece que está pegando en la pared. Cualquier consejo sería apreciado.

Estoy intentando iniciar sesión en economist.com (no hay razón, solo algo para lo que tengo un nombre de usuario y una contraseña), cuya página de inicio de sesión se encuentra en https://www.economist.com/user/login y cuyo formulario de inicio de sesión tiene el atributo action="https://www.economist.com/user/login?destination=%2F" .

Con las herramientas de desarrollador de Chrome, los datos del formulario para una solicitud de inicio de sesión son los siguientes:

name: ///////// pass: //////// form-build-id: form-483956e97a61f73fbc0ebf06b04dbe3f form_id: user_login securelogin_original_baseurl: https://www.economist.com op: Log in

Mi código OBTIENE la página de inicio de sesión, usa BeautifulSoup para determinar form_id; intentos de POST para el inicio de sesión usando mi nombre de usuario y contraseña, el form_id recuperado y las otras variables ocultas; y luego usa BeautifulSoup para verificar la página de inicio y ver si el banner tiene un enlace de inicio de sesión o de cierre de sesión para determinar si realmente me he conectado.

El código es el siguiente:

import requests from bs4 import BeautifulSoup # Setting user agent to a real browser instead of requests headers = requests.utils.default_headers() headers.update( { ''User-Agent'': ''Mozilla/5.0'', } ) # create a session and login s = requests.Session() login_page = s.get(''https://www.economist.com/user/login'', headers=headers) login = BeautifulSoup(login_page.text, ''lxml'') form = login.select_one("form > div > input") payload = { ''name'' : ''////////////'', ''pass'' : ''////////'', ''form_build_id'' : form[''value''], ''form_id'' : ''user_login'', ''securelogin_original_baseurl'' : ''https://www.economist.com'', ''op'' : ''Log in'' } response = s.post("https://www.economist.com/user/login?destination=%2F", data=payload, headers=headers) # check homepage banner to see if login or logout link is there url = "https://www.economist.com/" r = s.get(url, headers=headers) soup = BeautifulSoup(r.text, ''lxml'') banner = soup.select("div > div > span > a") for table_row in banner: print(table_row[''href''])

Cuando se ejecuta, este código muestra que el banner todavía tiene el enlace de inicio de sesión en lugar del de cierre de sesión, lo que, supongo, significa que no ha iniciado sesión. Sé que debo haber cometido un error muy simple aquí, pero después de leer otro preguntas similares aquí, parece que no puedo encontrar dónde me estoy yendo mal. Agradecería cualquier consejo para hacer que esto funcione.


Probé tu código y solo una cosa no funcionó conmigo.

form = login.select_one("form > div > input")

A:

form = login.find(''input'', attrs={''name'': "form_build_id"})

Luego, inicie sesión normalmente, y para asegurarse de que estoy conectado o no, obtengo una página que solo los usuarios registrados pueden visitar. http://www.economist.com/subscriptions/activation

si puede visitar esta página, entonces ha iniciado sesión o será redirigido a https://www.economist.com/user/register?destination=subscriptions%2Factivation&rp=activating

import requests from bs4 import BeautifulSoup # Setting user agent to a real browser instead of requests headers = requests.utils.default_headers() headers.update( { ''User-Agent'': ''Mozilla/5.0'', } ) # create a session and login s = requests.Session() login_page = s.get(''https://www.economist.com/user/login'', headers=headers) login = BeautifulSoup(login_page.text, ''lxml'') form = login.find(''input'', attrs={''name'': "form_build_id"})#works payload = { ''name'' : ''*****'', ''pass'' : ''*****'', ''form_build_id'' : form[''value''], ''form_id'' : ''user_login'', ''securelogin_original_baseurl'' : ''https://www.economist.com'', ''op'' : ''Log in'' } response = s.post("https://www.economist.com/user/login?destination=%2F", data=payload, headers=headers) activation_page = s.get(''http://www.economist.com/subscriptions/activation'', headers=headers) if activation_page.url == ''https://www.economist.com/user/register?destination=subscriptions%2Factivation&rp=activating'': print"Failed to login" elif activation_page.url == ''http://www.economist.com/subscriptions/activation'': print"Logged In Successfully!"