Saltar al contenido

Inicie sesión en Facebook usando solicitudes de Python

Solución:

Necesitas enviar un formulario completo. La forma más fácil de averiguar qué espera Facebook es utilizar algo como las herramientas de desarrollo de Google Chrome para monitorear sus solicitudes web.

Para hacer su vida más fácil, he monitoreado mi propio inicio de sesión en Facebook y lo reproduzco a continuación (con información privada redactada, obviamente) con la información sin importancia despojada:

Request URL:https://m.facebook.com/login.php?refsrc=https%3A%2F%2Fm.facebook.com%2F&refid=8
Request Method:POST

Form Data:
    lsd:AVqAE5Wf
    charset_test:€,´,€,´,水,Д,Є
    version:1
    ajax:0
    width:0
    pxr:0
    gps:0
    m_ts:1392974963
    li:cxwHUxatQiaLv1nZEYPp0aTB
    email:...
    pass:...
    login:Log In

Como puede ver, el formulario contiene muchos campos. Todos estos deben ser proporcionados para permitirle iniciar sesión. Su código le proporcionará el correo electrónico y la contraseña. El resto de los campos en realidad tienen sus valores establecidos por el HTML que Facebook le ofrece. Esto significa que, para emular un inicio de sesión del navegador, debe realizar los siguientes pasos:

  1. Haz un GET a la página de inicio de sesión (https://m.facebook.com/)
  2. Utilice una biblioteca de análisis de HTML (por ejemplo, BeautifulSoup) para analizar el HTML y encontrar los valores predeterminados de los campos del formulario.
    • Los valores predeterminados están todos en <input> Elementos HTML debajo del #login_form elemento. Querrá encontrarlos por su nombre (p. Ej. charset_test) y luego saque su value atributo.
    • Descubrir cómo hacer esto está fuera del alcance de esta respuesta, por lo que no voy a entrar en eso.
  3. Combine los valores predeterminados de los campos del formulario con su correo electrónico y contraseña, así:

    data = {
        'lsd': lsd,
        'charset_test': csettest, 
        'version': version,
        'ajax': ajax,
        'width': width,
        'pxr': pxr,
        'gps': gps,
        'm_ts': mts,
        'li': li,
    }
    data['email'] = email
    data['pass'] = pass
    data['login'] = 'Log In'
    
  4. Envíe su inicio de sesión mediante Solicitudes Session:

    s = requests.Session()
    r = s.post(url, data=data)
    r.raise_for_status()
    
  5. Envíe todo su tráfico HTTP futuro a través de ese Session.

Como puede ver, esta es una forma no trivial de hacer las cosas. Esto se debe a que no se espera que los programas usen el sitio web para iniciar sesión: en su lugar, se espera que use su SDK o su API web.

También estaba buscando una respuesta. Haciéndolo con requests es dolor. Entonces, usé mecanizar.

import mechanize
browser = mechanize.Browser()
browser.set_handle_robots(False)
cookies = mechanize.CookieJar()
browser.set_cookiejar(cookies)
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.41 Safari/534.7')]
browser.set_handle_refresh(False)

url="http://www.facebook.com/login.php"
browser.open(url)
browser.select_form(nr = 0)       #This is login-password form -> nr = number = 0
browser.form['email'] = YourLogin
browser.form['pass'] = YourPassw
response = browser.submit()
print response.read()

Funciona. mechanize.browser es un navegador emulado, por lo que no es necesario enviar todos los valores del formulario. Los enviará como un navegador normal, solo debe proporcionar el nombre de usuario y la contraseña.

¡Buena suerte!

Una biblioteca como RoboBrowser facilita cosas como iniciar sesión en Facebook:

import robobrowser

class Facebook(robobrowser.RoboBrowser):

    url="https://facebook.com"

    def __init__(self, email, password):
        self.email = email
        self.password = password
        super().__init__()
        self.login()

    def login(self):
        self.open(self.url)    
        login_form = self.get_form(id='login_form')
        login_form['email'] = self.email
        login_form['pass'] = self.password
        self.submit_form(login_form)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *