python模擬自動登錄網站(urllib2)


 不登錄打開網頁:

import urllib2
request = urllib2.Request('http://www.baidu.com')
response = urllib2.urlopen(request).read()
print response

 保存網頁圖片(https://www.baidu.com/img/bd_logo1.png):

picurl = 'https://www.baidu.com/img/bd_logo1.png' #定義圖片的url地址
req = urllib2.Request(picurl)
data = urllib2.urlopen(req).read()

file=open('d:\\zaa.jpg','wb') #將圖片保存為名為zaa.jpg的圖片
file.write(data)
file.flush()
file.close()

 

模擬自動登錄zabbix:

import urllib2,cookielib,urllib
#定義登錄地址
login_url = 'http://10.16.2.4/zabbix/index.php'
#定義登錄所需要用的信息,如用戶名、密碼等,詳見下圖,使用urllib進行編碼
login_data = urllib.urlencode({
                        "name": 'admin',
                        "password": 'password',
                        "autologin": 1,
                        "enter": "Sign in"})

#設置一個cookie處理器,它負責從服務器下載cookie到本地,並且在發送請求時帶上本地的cookie  
cj = cookielib.CookieJar() #獲取Cookiejar對象(存在本機的cookie消息)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) #自定義opener,並將opener跟CookieJar對象綁定
urllib2.install_opener(opener) #安裝opener,此后調用urlopen()時都會使用安裝過的opener對象
response=opener.open(login_url,login_data).read() #訪問登錄頁,自動帶着cookie信息
print response #返回登陸后的頁面源代碼

zabbix登錄頁面內容:

 

有的頁面登錄時會post到其他頁面,查看登錄頁面的form中的action地址,可能需要構造header頭信息:

#發送頭信息
headers = {
   'Referer':'http://10.16.2.4/zabbix/index.php',
   'Host':'10.16.2.4', #可以不要,一般兩項就可以 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
}
#定義登錄地址
login_url = 'http://10.16.2.4/zabbix/index.php'
#定義登錄所需要用的信息,如用戶名、密碼等,使用urllib進行編碼
login_data = urllib.urlencode({
                        "name": 'admin',
                        "password": 'password',
                        "autologin": 1,
                        "enter": "Sign in"})

#設置一個cookie處理器,它負責從服務器下載cookie到本地,並且在發送請求時帶上本地的cookie  
cj = cookielib.CookieJar() #獲取Cookiejar對象(存在本機的cookie消息)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) #自定義opener,並將opener跟CookieJar對象綁定
urllib2.install_opener(opener) #安裝opener,此后調用urlopen()時都會使用安裝過的opener對象

urllib2.urlopen(login_url)#打開登錄主頁面(他的目的是從頁面下載cookie,這樣我們在再送post數據時就有cookie了,否則發送不成功) 
#通過urllib2提供的request方法來向指定Url發送我們構造的數據,並完成登錄過程 req=urllib2.Request(post_url,login_data,headers) #post_url需要在請求過程中自己得出 response=urllib2.urlopen(req)
print response.read()
response.close()

在ie中手動登錄后,可以看到相應的header頭信息,如下:

 

模擬登錄piao.x.com(先使用chrome抓包,輸入一個錯誤的賬號密碼)

import urllib,urllib2,cookielib

username='name'
password='pass'
loginurl='http://piao.x.com/loginHandler.ashx' #此為在登錄過程中post到的頁面

cj = cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.8.1000 Chrome/30.0.1599.101 Safari/537.36',
        'Referer':'http://piao.x.com/login/login',
        'Content-Type':'text/html'
        }
for key in headers: #增加多個header
    opener.addheaders.append((key,headers[key]))

data = urllib.urlencode({"username":username,"password":password}) #使用google可以看到此處的用戶密碼為明文發送,格式為username=username&password=password,如下圖所示。
opener.open(loginurl,data)
print opener.open('http://piao.x.com/#dGlja2V0').read() #登錄成功后可以打開其他頁面。

Form Data部分為需要Post到Server的參數,piao登錄需要Post的參數是2個,zabbix登錄需要Post的參數是4個 。

piao login:

 zabbix login:

如上圖所示,查看Respons Headers部分,可以看到其中的Set-Cookie,該cookie可以在后面的站內訪問使用,使用urllib2也可以看到該部分內容:

import cookielib,urllib,urllib2
zabbix_url="http://10.16.2.4/zabbix/index.php"
zabbix_header = {"Content-Type":"application/json"}
zabbix_user   = "admin"
zabbix_pass   = "password"

cj = cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
data = urllib.urlencode({"name":zabbix_user,"password":zabbix_pass,'form_refresh':1,'enter':'Sign in'}) 
response = opener.open(zabbix_url,data)
print response.headers #打印Server 的response header頭部分內容:
返回: Date: Wed,
25 May 2016 08:07:17 GMT Server: Apache/2.4.6 (CentOS) PHP/5.4.16 X-Powered-By: PHP/5.4.16 Set-Cookie: zbx_sessionid=bbc97766e8c132a56f2d016a6963219a Set-Cookie: PHPSESSID=v8sno86fnc19iqgltipae0l2d2; path=/zabbix/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: PHPSESSID=v8sno86fnc19iqgltipae0l2d2; path=/zabbix/ Set-Cookie: PHPSESSID=v8sno86fnc19iqgltipae0l2d2; path=/zabbix/ Set-Cookie: PHPSESSID=v8sno86fnc19iqgltipae0l2d2; path=/zabbix/ Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8

在urllib2中不再使用用戶名密碼,直接使用上面得到的cookie訪問站內頁面:

import cookielib,urllib,urllib2
zabbix_url="http://10.16.2.4/zabbix/index.php"
zabbix_header = {"Content-Type":"application/json"}

cj = cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

zabbix_header = {'cookie':'zbx_sessionid=bbc97766e8c132a56f2d016a6963219a'} #使用前面得到的cookie for key in zabbix_header: #增加多個header,把cookie放到header中,訪問server時使用該cookie
    opener.addheaders.append((key,zabbix_header[key]))

print opener.open('http://10.16.2.4/zabbix/tr_status.php?fullscreen=0&groupid=0&hostid=0&show_triggers=1&ack_status=1&show_events=1&show_severity=0&txt_select=&application=&inventory%5B0%5D%5Bfield%5D=type&inventory%5B0%5D%5Bvalue%5D=&filter_set=Filter').read() #該頁面可以直接訪問,不再需要使用用戶名密碼等信息。

 

參考:http://www.cnblogs.com/sysu-blackbear/p/3629770.html 保存cookie到本地文件

      http://www.2cto.com/kf/201401/275152.html 詳細,帶有http具體訪問過程

     http://www.jb51.net/article/63759.htm 簡明

    http://www.blogjava.net/hongqiang/archive/2012/08/01/384552.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM