2014-09-25 146 views
1

這段代碼有什麼問題?我嘗試使用Python 3.4登錄到ISP客戶端頁面,並返回相同的HTML頁面。使用python登錄網站

import urllib.request 
import urllib.parse 
from http import cookiejar 
from bs4 import BeautifulSoup 

url = "https://www.exampe.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 = {'unam' : name, 'pass' : passw} 
    data = urllib.parse.urlencode(values) 
    binary_data = data.encode('utf-8') 
    login = urllib.request.Request(url,binary_data,headers) 
    login_response = opener.open(login) 
    soup = BeautifulSoup(login_response.read(),'lxml') 
    print(soup) 

Login() 
+0

有很多原因可能無法正常工作。你應該調查更多你的ISP頁面,並檢查是否沒有一些隱藏的字段或其他保護措施,這種方式登錄。 – 2014-09-25 19:19:35

+0

它不僅適用於ISP頁面,也適用於其他網頁。 – 2014-09-26 06:46:40

+0

任何建議..? – 2014-09-26 13:10:46

回答

0
 import urllib.request 
     import urllib.parse 
     from http import cookiejar 
     from bs4 import BeautifulSoup 
     login = 'user' 
     password = 'password'' 
     cook = 'mfp.cookies' 
     url = "https://example/login.php" 
     cj = cookiejar.MozillaCookieJar(cook) 
     opener=urllib.request.build_opener(urllib.request.HTTPRedirectHandler(), 
     urllib.request.HTTPSHandler(),urllib.request.HTTPSHandler(debuglevel=0), 
     urllib.request.HTTPCookieProcessor(cj)) 
     opener.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux i686)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36'Wink] 
     values = {'uname' : login,'upass' : password,'login' : 'Login'} 
     data = urllib.parse.urlencode(values) 
     binary_data = data.encode('UTF-8') 
     s = opener.open(url,binary_data) 
     main = opener.open('http://example.com/page/1/index.php') 
     soup = BeautifulSoup(main.read(),'lxml') 

     cj.save() 
0

values = {'unam' : name, 'pass' : passw}這裏假定表單元素名稱是unampass從網站到不同網站。例如,如果您嘗試登錄Facebook,則字段名稱爲emailpass。然後,該行必須修改爲 values = {'email' : name, 'pass' : passw}

檢查您需要登錄的網頁中的元素以確定名稱並按照這些名稱使用它們。

+0

獲取相同的html頁面返回 – 2014-09-28 05:39:21

+0

如何解決此問題...? – 2014-09-28 05:45:58