网上搜一下,读取cookie的基本都是这份代码。我也忘了是从那里抄来的了,这里贴一下 ,对于最新的chrome需要修改下路径:
代码语言:javascript复制# chrome 96 版本以下
# filename = os.path.join(os.environ['USERPROFILE'], r'AppDataLocalGoogleChromeUser DatadefaultCookies')
# chrome96 版本以上
# filename = os.path.join(os.environ['USERPROFILE'], r'AppDataLocalGoogleChromeUser DatadefaultNetworkCookies')
全部代码:
代码语言:javascript复制import sqlite3
import urllib3
import os
import json
import sys
import base64
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def dpapi_decrypt(encrypted):
import ctypes
import ctypes.wintypes
class DATA_BLOB(ctypes.Structure):
_fields_ = [('cbData', ctypes.wintypes.DWORD),
('pbData', ctypes.POINTER(ctypes.c_char))]
p = ctypes.create_string_buffer(encrypted, len(encrypted))
blobin = DATA_BLOB(ctypes.sizeof(p), p)
blobout = DATA_BLOB()
retval = ctypes.windll.crypt32.CryptUnprotectData(
ctypes.byref(blobin), None, None, None, None, 0, ctypes.byref(blobout))
if not retval:
raise ctypes.WinError()
result = ctypes.string_at(blobout.pbData, blobout.cbData)
ctypes.windll.kernel32.LocalFree(blobout.pbData)
return result
def aes_decrypt(encrypted_txt):
with open(os.path.join(os.environ['LOCALAPPDATA'],
r"GoogleChromeUser DataLocal State"), encoding='utf-8', mode="r") as f:
jsn = json.loads(str(f.readline()))
encoded_key = jsn["os_crypt"]["encrypted_key"]
encrypted_key = base64.b64decode(encoded_key.encode())
encrypted_key = encrypted_key[5:]
key = dpapi_decrypt(encrypted_key)
nonce = encrypted_txt[3:15]
cipher = Cipher(algorithms.AES(key), None, backend=default_backend())
cipher.mode = modes.GCM(nonce)
decryptor = cipher.decryptor()
return decryptor.update(encrypted_txt[15:])
def chrome_decrypt(encrypted_txt):
if sys.platform == 'win32':
try:
if encrypted_txt[:4] == b'x01x00x00x00':
decrypted_txt = dpapi_decrypt(encrypted_txt)
return decrypted_txt.decode()
elif encrypted_txt[:3] == b'v10':
decrypted_txt = aes_decrypt(encrypted_txt)
return decrypted_txt[:-16].decode()
except WindowsError:
return None
else:
raise WindowsError
def get_cookies_from_chrome(domain):
sql = f'SELECT name, encrypted_value as value FROM cookies where host_key like "%{domain}%"'
# chrome 96 版本以下
# filename = os.path.join(os.environ['USERPROFILE'], r'AppDataLocalGoogleChromeUser DatadefaultCookies')
# chrome96 版本以上
filename = os.path.join(os.environ['USERPROFILE'], r'AppDataLocalGoogleChromeUser DatadefaultNetworkCookies')
con = sqlite3.connect(filename)
con.row_factory = sqlite3.Row
cur = con.cursor()
cur.execute(sql)
cookie = ''
cookie_dict = {}
for row in cur:
# print("1111>>>>>",row)
if row['value'] is not None:
name = row['name']
value = chrome_decrypt(row['value'])
# print("2222>>>>",name,value)
if value is not None:
cookie = name '=' value ';'
cookie_dict[name] = value
return cookie_dict
if __name__ == '__main__':
domain = 'taobao.com' # 目标网站域名
cookie = get_cookies_from_chrome("")
print(cookie)
☆文章版权声明☆
* 网站名称:obaby@mars * 网址:https://h4ck.org.cn/ * 本文标题: 《Python3 读取Chrome cookie》 * 本文链接:https://h4ck.org.cn/2022/11/python3-读取chrome-cookie/ * 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。
分享文章:
相关文章:
- Python3 requests 下载进度条
- 群晖 NAS Python3 PIP
- python3.7 安装alipay-sdk-python(PyCrypto)
- 美图录 爬虫
- mht文件图片解析工具(兼容Chrome/Blink)
- missdica.com爬虫【美女图片爬虫】
- 妹子图爬虫
- 韩国美女模特爬虫
- Calling IDA APIs from IDAPython with ctypes
- QQ音乐导出