2014-10-08 97 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