2014-09-25 149 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