es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo inicio sesión en Twitter con Python requests?

¿Cómo inicio sesión en Twitter con Python y requests?

import requests
from bs4 import BeautifulSoup

username = input(str("Nombre de usuario >>> "))
password = input(str("Contraseña >>> "))
# URL de inicio de sesión
post = "https://twitter.com/sessions"
url = "https://twitter.com"

data = {"session[username_or_email]": username,
        "session[password]": password,
        "scribe_log": "",
        "redirect_after_login": "/",
        "remember_me": "1"}

with requests.Session() as s:
    r = s.get(url, headers={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0"})
    # Obtener token de autenticación
    soup = BeautifulSoup(r.content, "lxml")
    AUTH_TOKEN = soup.select_one("input[name=authenticity_token]")["value"]
    # Actualizar datos, enviar petición POST e iniciar sesión
    data["authenticity_token"] = AUTH_TOKEN
    r = s.post(post, data=data)
    print(r.content)

Escribí un código como este pero no funcionó. El error que obtuve:

AUTH_TOKEN = soup.select_one("input[name=auth_token]")["value"]
TypeError: 'NoneType' object is not subscriptable

No quiero usar la API de Twitter porque no tengo una cuenta de desarrollador. Por lo tanto, necesito iniciar sesión con requests.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error que estás recibiendo probablemente se debe a que el elemento de entrada con el nombre “auth_token” no está presente en el HTML de la página. Un nombre común para el elemento de entrada del token de autenticación es “authenticity_token”.

    Para iniciar sesión en Twitter con Python requests, puedes seguir estos pasos:

    1. Envía una solicitud GET a la página de inicio de sesión de Twitter (https://twitter.com/login).
    2. Extrae el token de autenticidad del HTML de la respuesta utilizando BeautifulSoup.
    3. Incluye el token de autenticidad en los datos POST junto con el nombre de usuario y contraseña.
    4. Envía una solicitud POST al endpoint de inicio de sesión de Twitter (https://twitter.com/sessions) con los datos del paso 3.

    Aquí tienes un fragmento de código actualizado que debería funcionar:

    import requests
    from bs4 import BeautifulSoup
    
    USERNAME = "tu_nombre_de_usuario_de_Twitter"
    PASSWORD = "tu_contraseña_de_Twitter"
    
    # Paso 1: Envía una solicitud GET a la página de inicio de sesión de Twitter
    login_url = "https://twitter.com/login"
    response = requests.get(login_url)
    soup = BeautifulSoup(response.content, "html.parser")
    
    # Paso 2: Extrae el token de autenticidad del HTML
    authenticity_token = soup.find("input", attrs={"name": "authenticity_token"})["value"]
    
    # Paso 3: Incluye el token de autenticidad en los datos POST
    data = {
        "session[username_or_email]": USERNAME,
        "session[password]": PASSWORD,
        "authenticity_token": authenticity_token,
    }
    
    # Paso 4: Envía una solicitud POST al endpoint de inicio de sesión
    login_endpoint = "https://twitter.com/sessions"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
    }
    response = requests.post(login_endpoint, headers=headers, data=data)
    
    # Comprueba si el inicio de sesión fue exitoso
    if response.status_code == 200:
        print("Inicio de sesión exitoso")
    else:
        print("Inicio de sesión fallido")
    

    Asegúrate de reemplazar “tu_nombre_de_usuario_de_Twitter” y “tu_contraseña_de_Twitter” con tus credenciales reales de Twitter antes de ejecutar el código.

Comments are closed.