python-获取cookies

获取本地cookies
环境配置:
python3.8.8
pywin32:

  1. https://sourceforge.net/projects/pywin32/files/pywin32/Build%20222/
  2. pip install pywin32 -i https://pypi.org/

场景:解析谷歌cookies缓存

代码:

import os
import json
import base64
import sqlite3
from win32crypt import CryptUnprotectData
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

def get_string(local_state):
    with open(local_state, 'r', encoding='utf-8') as f:
        s = json.load(f)['os_crypt']['encrypted_key']
    return s

def pull_the_key(base64_encrypted_key):
    encrypted_key_with_header = base64.b64decode(base64_encrypted_key)
    encrypted_key = encrypted_key_with_header[5:]
    key = CryptUnprotectData(encrypted_key, None, None, None, 0)[1]
    return key

def decrypt_string(key, data):
    nonce, cipherbytes = data[3:15], data[15:]
    aesgcm = AESGCM(key)
    plainbytes = aesgcm.decrypt(nonce, cipherbytes, None)
    plaintext = plainbytes.decode('utf-8')
    return plaintext

def get_cookie_from_chrome(host='csdn.net'):
  local_state = os.environ['LOCALAPPDATA'] + r'\Google\Chrome\User Data\Local State'
  cookie_path = os.environ['LOCALAPPDATA'] + r"\Google\Chrome\User Data\Default\Cookies"
    
  host='%'+host
  sql = "select host_key,name,encrypted_value from cookies where host_key like '%s'" % host
  host_key_dict = {}
  with sqlite3.connect(cookie_path) as conn:
      cu = conn.cursor()
      res = cu.execute(sql).fetchall()
      cu.close()
      cookies = {}
      key = pull_the_key(get_string(local_state))
      for host_key, name, encrypted_value in res:
          if encrypted_value[0:3] == b'v10':
              cookies[name] = decrypt_string(key, encrypted_value)
          else:
              cookies[name] = CryptUnprotectData(encrypted_value)[1].decode()
          if host_key not in host_key_dict.keys():
              host_key_dict[host_key] = 1
          else:
              host_key_dict[host_key] += 1
      print(host_key_dict)
      return cookies

print(get_cookie_from_chrome())

使用cookieJar(底层session)

from urllib import request,parse
from http.cookiejar import CookieJar
# 1.创建一个cookiejar对象
cookiejar = CookieJar()
# 2.使用cookiejar创建一个HTTPCookieProcessor对象
handler = request.HTTPCookieProcessor(cookiejar)
# 3.使用上一步创建的Handler创建一个opener
opener = request.build_opener(handler)
# 4.使用opener发送登录请求
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' 
}
data = {
    'email':"你的帐号",
    'password':'你的密码'
}
url = 'http://www.renren.com/PLogin.do'
#构建一个请求
req = request.Request(url,headers = headers,data=parse.urlencode(data).encode('utf-8'))
#普通访问
#response = request.urlopen(req)
#使用opener登录成功后,opener对象会保存登录信息
opener.open(req)
# 5. 模拟登陆后访问(带有cookies)
req = request.Request(url,headers=headers)
resp = opener.open(req)
########################################################
# 也可以直接将cookie保存下来(或者使用它的子类FileCookieJar,MozillaCookieJar,LWPCookieJar)
cookie = cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
resp = opener.open(url)
cookieStr = ''
for item in cookie:
    cookieStr = cookieStr + item.name + '=' + item.value + ';'
print(cookieStr)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值