Progtwigdor de Python para iniciar sesión en la página web.

¿Alguien sabe lo que está mal en este código? Cuando lo ejecuto me devuelven la misma página HTML.

# -*- coding: utf-8 -*- from http import cookiejar import urllib.request import urllib.parse from bs4 import BeautifulSoup login = 'username' password = 'password' cookiejar = cookiejar.CookieJar() urlOpener = \ urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookiejar)) urlOpener.addheaders = [('User-Agent', 'Mozilla/5.0 (X11 Linux i686)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36' )] values = {'user_name': login, 'user_pass': password, 'login': 'Login'} data = urllib.parse.urlencode(values) binary_data = data.encode('utf-8') request = urllib.request.Request('http://securityoverride.com/login.php' , binary_data) url1 = urlOpener.open(request) url2 = urlOpener.open('http://securityoverride.org/challenges/programmin/1/index.php') soup = BeautifulSoup(url2.read(), 'lxml') print soup.find_all('center') 

  urllib.request import urllib.parse from http import cookiejar from bs4 import BeautifulSoup url = "http://securityoverride.com/login.php" name = "username" passw = "password" def Login(): cj = cookiejar.CookieJar() user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = { 'User-Agent' : user_agent } redirect =urllib.request.HTTPRedirectHandler() opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) values = {'user_name': login, 'user_pass': password, 'login': 'Login'} data = urllib.parse.urlencode(values) binary_data = data.encode('utf-8') login = urllib.request.Request(url,binary_data,headers) login_response = opener.open(login) url2 = urlOpener.open('http://securityoverride.org/challenges/programmin/1/index.php') soup = BeautifulSoup(url2.read(), 'lxml') print soup.find_all('center') Login() 

El inicio de sesión en una aplicación web por script puede ser trivial o tremendamente complejo, dependiendo de cómo esté organizada la página de inicio de sesión. En mi experiencia, la única manera infalible es:

  • utilizar un espía de red como wireshark
  • espiar una secuencia de inicio de sesión exitosa desde un verdadero navegador
  • hasta el bucle exitoso:
    • Intenta reproducirlo con el script.
    • Espiar la secuencia de inicio de sesión del script y analizar las diferencias.

En mi humilde opinión utilizando urllib2 o las requests hacen pequeñas diferencias. La única herramienta que es mucho mejor en eso sería mechanize , pero desafortunadamente parece que no se va a trasladar a Python 3.