2014-10-08 98 views
-3

有没有人知道这段代码有什么问题? 当我运行它时,我得到相同的HTML页面。python programm登录到网页

# -*- 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') 
+0

缩进和引用是你的问题。修复这些问题,我们可能会提供更多帮助。 – Andy 2014-10-08 13:25:55

+0

使用请求而不是urllib。请求就像urllib的包装器。它使它更容易。 http://docs.python-requests.org/en/latest/我完全信任它:P – 2014-10-08 13:28:34

+0

使用urllib不可能使用 – Poke 2014-10-08 13:31:05

回答

0
 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() 
0

根据登录页面的组织方式,通过脚本登录Web应用程序可能很简单或非常复杂。根据我的经验,唯一的万无一失的方法是:

  • 使用像wireshark
  • 网络间谍,从一个真正的浏览器
  • 间谍满成功登录序列,直到成功为止循环:
    • 尝试重现它用脚本
    • 从脚本中窥探登录序列并分析差异

恕我直言,使用urllib2requests没有什么区别。唯一比这更好的工具是mechanize,但不幸的是它似乎没有被移植到Python 3