原文链接:https://www.cnblogs.com/gayhub/p/pythongetcookiefromchrome.html

好几年前我在做一些自动化的脚本时,脑子里也闪过这样的想法:能不能直接把浏览器的cookies取出来用呢?

直到昨天看到代码《python模拟发送动弹》,想起来当年我也曾经有类似的想法没能完成,那就优先拿这个练手,之后的代码也会用这个功能。

直接从浏览器中取出cookies,有以下好处和用途: 1、不需要配置用户密码,直接读出浏览器中cookies就得到一样的身份,用来完成各种自动化操作。 2、部分网站登录会更新Session,会导致之前成功登录的Session失效,与浏览器使用相同的Session,不用进行登录操作,不会互相挤下线。 3、全是废话,我不想写了,行吗?

使用到软件的sqlite3的图形管理工具有: SQLiteDatabaseBrowserPortable http://sqlitebrowser.org/ sqlitespy http://www.yunqa.de/delphi/products/sqlitespy/index

使用到的python库有: sqlite3 python标准库,不需要下载安装

pywin32 pywin32是python版的windows API库,让python可以调用各种各样的windows API,代码中用到的win32crypt就是属于pywin32库的一部分。 建议手动下载对应版本pywin32安装 https://sourceforge.net/projects/pywin32/?source=directory

requests requests是一个相对比较简单易用的http库,用来代替urllib23之类的标准库,使用命令安装pip install requests

看代码:

"""
python3从chrome浏览器读取cookie
get cookie from chrome
2016年5月26日 19:50:38 codegay """
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)

另外:

IE浏览器Cookie数据位于:%APPDATA%\Microsoft\Windows\Cookies\ 目录中的xxx.txt文件 (里面可能有很多个.txt Cookie文件)
如:C:\Users\yren9\AppData\Roaming\Microsoft\Windows\Cookies\0WQ6YROK.txt

在IE浏览器中,IE将各个站点的Cookie分别保存为一个XXX.txt这样的纯文本文件(文件个数可能很多,但文件大小都较小);而Firefox和Chrome是将所有的Cookie都保存在一个文件中(文件大小较大),该文件的格式为SQLite3数据库格式的文件。

Firefox的Cookie数据位于:%APPDATA%\Mozilla\Firefox\Profiles\ 目录中的xxx.default目录,名为cookies.sqlite的文件。
如:C:\Users\jay\AppData\Roaming\Mozilla\Firefox\Profiles\ji4grfex.default\cookies.sqlite
在Firefox中查看cookie, 可以选择”工具 > 选项 >” “隐私 > 显示cookie”。

Chrome的Cookie数据位于:%LOCALAPPDATA%\Google\Chrome\User Data\Default\ 目录中,名为Cookies的文件。
如:C:\Users\jay\AppData\Local\Google\Chrome\User Data\Default\Cookies

在Linux系统上(以Ubuntu 12.04 和 RHEL6.x 为例)浏览器的Cookie
Firefox的Cookie路径为:$HOME/.mozilla/firefox/xxxx.default/目录下的cookie.sqlite文件。

 BASH
1234master@jay-linux:~/.mozilla/firefox/tffagwsn.default$ ll cookies.sqlite-rw-r--r-- 1 master master 1572864 Apr 21 16:54 cookies.sqlitemaster@jay-linux:~/.mozilla/firefox/tffagwsn.default$ pwd/home/master/.mozilla/firefox/tffagwsn.default

参考资料:

http://en.wikipedia.org/wiki/HTTP_cookie

http://www.milincorporated.com/a2_cookies.html

http://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data

http://superuser.com/questions/292952/chrome-cookies-folder-in-windows-7

原文地址:http://blog.sina.com.cn/s/blog_477071c50102vjai.html

-------------------------------------------------------------------------分割线-----------------------------------------------------------------------------

get_chrome_cookies(url) 函数, 可以获取 Chrome 浏览器的 Cookies 信息. 程序在 Windows 下调试通过, 因为 C 盘需要特殊权限来读写文件, 因此程序先将 Cookies 数据库文件拷贝到 D 盘. 该方法用到了第三方库 win32crypt.

import sqlite3
import win32crypt
import os
 
def get_chrome_cookies(url):
    os.system('copy "C:\\Users\\Liu\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Cookies" D:\\python-chrome-cookies')
    conn = sqlite3.connect("d:\\python-chrome-cookies")
    ret_list = []
    ret_dict = {}
    for row in conn.execute("select host_key, name, path, value, encrypted_value from cookies"):
        if row[0] != url:
            continue
        ret = win32crypt.CryptUnprotectData(row[4], None, None, None, 0)
        ret_list.append((row[1], ret[1]))
        ret_dict[row[1]] = ret[1].decode()
    conn.close()
    os.system('del "D:\\python-chrome-cookies"')
    return ret_dict
使用方法: x = requests.get(url, cookies = get_chrome_cookies(domain))
 

参考资料:

python模拟发送动弹

http://www.oschina.net/code/snippet_209614_21944

用Python进行SQLite数据库操作

http://www.cnblogs.com/yuxc/archive/2011/08/18/2143606.html

encrypted_value解密脚本

http://www.ftium4.com/chrome-cookies-encrypted-value-python.html

利用cookie劫持微博私信

https://segmentfault.com/a/1190000002569850

你所不知道的HostOnly Cookie

https://imququ.com/post/host-only-cookie.html

python3 读取chrome浏览器cookies的更多相关文章

  1. python3读取chrome浏览器cookies

    好几年前我在做一些自动化的脚本时,脑子里也闪过这样的想法:能不能直接把浏览器的cookies取出来用呢? 直到昨天看到代码<python模拟发送动弹>,想起来当年我也曾经有类似的想法没能完 ...

  2. Python3 + selenium + Chrome浏览器(webdriver.Chrome()报错)

    Python3 + selenium + Chrome浏览器 Error: selenium.common.exceptions.WebDriverException: Message: 'chrom ...

  3. Chrome浏览器缓存查看工具-ChromeCacheView

    最近想听一下最新的流行热歌,按着某网站的新歌排行榜逐首在巨鲸音乐网搜索下载,但相当一部分的歌曲还是没能下载到,逼不得已只能到百度MP3下载,在搜索结果中已经挑体积比较大的文件来下载了,但下载到的MP3 ...

  4. 读取Chrome书签文件

    使用C#读取Chrome浏览器的本地书签文件,当前文件在C盘下用户文件夹\AppData\Local\Google\Chrome\User Data\Default\下的Bookmarks 打开这个文 ...

  5. Python3.5+selenium操作Chrome浏览器

    1.安装selenium 命令提示符下输入: pip install selenium 2.下载chromedriver 点击下载 3.将解压后的chromedriver.exe放到chrome浏览器 ...

  6. Python3+Selenium2完整的自动化测试实现之旅(二):IE和Chrome浏览器驱动配置

    上一篇写了自动化测试需要的最基础环境配置,地址:https://www.cnblogs.com/tdp0108/p/10412073.html 当前市面上很多公司开发的应用软件都是BS架构,即基于浏览 ...

  7. python3.6中使用selenium + chromedriver访问Chrome浏览器时报错

    from selenium import webdriver from selenium.webdriver.chrome.options import Options if __name__ == ...

  8. qpython3 读取安卓lastpass Cookies

    之前我的博客写了python读取windows chrome Cookies,沿着同样的思路,这次本来想尝试读取安卓chrome Cookies, 但是可能是chrome的sqlite3版本比较高读取 ...

  9. Chrome浏览器Cookie解密

    做过 web 开发的都知道:浏览器会把重要的认证登录认证信息存放到 cookie 中,在 cookie 有效期内,再次访问这个网站的时候就可以直接从 cookie 中获取到登录信息,这样就可以实现自动 ...

随机推荐

  1. 测试-spring源码摘取

    首次加载idea是真的慢... 也许是我电脑性能太差... 我分析他内部有一套索引的机制,需要每次打开现建立... 没有固态的话,首次打开还不如eclipse 第一次使用博客园,以前都在csdn混~ ...

  2. Dedecms中{dede:type}标签支持调用父级栏目名称

    需求: 我们用{dede:type}标签调用栏目相关内容时,同时需要调用该栏目的父级栏目的名称. {dede:type}标签的代码做了一下开发,支持这个调用了. 开发方法: 1.打开include/t ...

  3. thinkphp5集成GatewayWorker

    Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架,而GatewayWorker则是基于Workerman开发的一个长连接框架,支持分布式部署,支持全局广播或者向任意客 ...

  4. win10 设置开机启动VMware虚拟机并打开指定镜像

    1.设置win10开机启动应用 把应用程序的‘快捷方式’放到“系统启动文件夹”里即可. 2.开机启动VMware虚拟机并打开指定镜像 a.右键VMware Workstation快捷方式,看属性 b. ...

  5. Thread基础-创建线程的方式

    Java线程创建的几种简单方式 1. extends Thread类 public class ThreadDemo extends Thread{ @Override public void run ...

  6. Mbatis使用

    Mybatis的搭建过程 导入jar 创建mybatis的核心(全局)配置文件mybatis-config.xml,并配置 <?xml version="1.0" encod ...

  7. Eplan如何添加“连接定义点”

    Eplan如何添加“连接定义点” 参考文档:https://blog.csdn.net/txwtech/article/details/90510106

  8. LeetCode 题解目录

    前言 本目录将不断更新记录leetcode的刷题日记. 二叉树 序号 标题 难度 标签 1 108 将有序数组转换为二叉搜索树 简单 树.深度优先搜索 2 538 把二叉搜索树转换为累加树 简单 树 ...

  9. Scanner扫描器的使用

    Scanner:扫描器,可以通过Scanner类扫描用户在控制台录入的数据. 1.导包 //导包快捷键Alt+Enter 2.创建键盘录入对象 //键盘录入对象的名称为 “sc” 3.接收数据 //将 ...

  10. Windows下6款实用软件(强烈推荐!)

    Windows下6款实用软件 1.notepads Notepads作为一款编辑器,美观.轻量,功能强大,支持多标签页.Markdown.日常文本编辑.查看,Notepads轻松胜任,如果厌烦了Win ...