好幾年前我在做一些自動化的腳本時,腦子里也閃過這樣的想法:能不能直接把瀏覽器的cookies取出來用呢?
直到昨天看到代碼《python模擬發送動彈》,想起來當年我也曾經有類似的想法沒能完成,那就優先拿這個練手,之后的代碼也會用這個功能。
直接從瀏覽器中取出cookies,有以下好處和用途:
1、不需要配置用戶密碼,直接讀出瀏覽器中cookies就得到一樣的身份,用來完成各種自動化操作。
2、部分網站登錄會更新Session,會導致之前成功登錄的Session失效,與瀏覽器使用相同的Session,不用進行登錄操作,不會互相擠下線。
3、全是廢話,我不想寫了,行嗎?
使用到軟件的sqlite3的圖形管理工具有:
SQLiteDatabaseBrowserPortable
sqlitespy
使用到的python庫有:
sqlite3 python標準庫,不需要下載安裝
pywin32 pywin32 windows的API庫,讓python可以調用各種各樣的windows API,代碼中用到的win32crypt就是屬于pywin32庫的一部分。 建議手動下載對應版本pywin32安裝
requests requests是一個相對比較簡單易用的http庫,用來代替urllib23之類的標準庫,使用命令安裝pip install requests
看代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import os import sqlite3 import requests from win32.win32crypt import CryptUnprotectData def getcookiefromchrome(host = '.oschina.net' ): cookiepath = os.environ[ 'LOCALAPPDATA' ] + r "\Google\Chrome\User Data\Default\Cookies" sql = "select host_key,name,encrypted_value from cookies where host_key='%s'" % host with sqlite3.connect(cookiepath) as conn: cu = conn.cursor() cookies = {name:CryptUnprotectData(encrypted_value)[ 1 ].decode() for host_key,name,encrypted_value in cu.execute(sql).fetchall()} print (cookies) return cookies #運行環境windows 2012 server python3.4 x64 chrome 50 #以下是測試代碼 #getcookiefromchrome() #getcookiefromchrome('.baidu.com') url = 'http://my.oschina.net/' httphead = { 'User-Agent' : 'Safari/537.36' ,} #設置allow_redirects為真,訪問http://my.oschina.net/ 可以跟隨跳轉到個人空間 r = requests.get(url,headers = httphead,cookies = getcookiefromchrome( '.oschina.net' ),allow_redirects = 1 ) print (r.text) |