精华内容
下载资源
问答
  • python获取浏览器cookies
    千次阅读
    2022-02-09 15:36:41

    https://github.com/borisbabic/browser_cookie3

    更多相关内容
  • python 获取 cookie

    python 获取浏览器 cookie代码

     
    import browser_cookie3
    dict1 = browser_cookie3.chrome(domain_name='baidu.com') 
    # print(dict1)
    s=""
    for u in dict1:
        s = (u.name+"="+u.value+"; ")
    
    # for k  in dict1:
    #     v = str(dict1[k])
    #     s =s + (k+"="+v+"; ")
    
    s = ("Cookie: "+s)
    print(s)
    
    import pyperclip
    
    pyperclip.copy(s)
    
    
    

    环境安装

    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    # 设置国内代理
    pip install browser-cookie3
    pip install pyperclip
    
    展开全文
  • IE浏览器:%APPDATA%\Microsoft\Windows\Cookies\ 目录中的xxx.txt文件 (IE浏览器分开存放的); 火狐浏览器:%APPDATA%\Mozilla\Firefox\Profiles\ 目录中的???.default-release或???.default目录,名为cookies....

    第一题

    win10系统中本地cookie的存放位置为:

        IE浏览器:%APPDATA%\Microsoft\Windows\Cookies\ 目录中的xxx.txt文件 (IE浏览器分开存放的);

        火狐浏览器:%APPDATA%\Mozilla\Firefox\Profiles\ 目录中的???.default-release或???.default目录,名为cookies.sqlite的文件;

       谷歌浏览器:%LOCALAPPDATA%\Google\Chrome\User Data\Default\ 目录中,名为Cookies的文件。

       使用以下代码获取你所用机器的不同浏览器的cookie的文件夹,并打印输出。

    只写了一个谷歌的例子

    import os
    import json
    import base64
    import sqlite3
    import win32crypt
    from cryptography.hazmat.primitives.ciphers.aead import AESGCM
    
    # 读取chrome保存在json文件中的key(str)
    def GetString(LocalState):
        with open(LocalState, 'r', encoding='utf-8') as f:
            s = json.load(f)['os_crypt']['encrypted_key']
        return s
    
    # base64解码,DPAPI解密,得到真实的AESGCM key(bytes)
    def pull_the_key(base64_encrypted_key):
        encrypted_key_with_header = base64.b64decode(base64_encrypted_key)
        encrypted_key = encrypted_key_with_header[5:]
        key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1]
        return key
    
    # AESGCM解密
    def DecryptString(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
    
    if __name__ == '__main__':
    
        UserDataDir = os.environ['LOCALAPPDATA'] + r'\Google\Chrome\User Data'
        LocalStateFilePath = UserDataDir + r'\Local State'
        CookiesFilePath = UserDataDir + r'\Default\Cookies'
        print(CookiesFilePath)
    
        con = sqlite3.connect(CookiesFilePath)
        con.text_factory = bytes
        res = con.execute('select host_key,name,encrypted_value from cookies').fetchall()
        con.close()
        print(res)
    
        key = pull_the_key(GetString(LocalStateFilePath))
        for i in res:
            print(i[0], i[1], DecryptString(key, i[2]))

    第二题 

    以下是关于SQL接口的扩展库sqlite3的介绍:

            https://www.runoob.com/sqlite/sqlite-python.html

    请使用 sqlite3创建一个对cookie数据库文件的数据库连接对象,解析并打印cookies.sqlite文件的内容。

    if 'default-release-2' in folds_end:
        cookie_fold_index = folds_end.index('default-release-2')

    如果没有出现以下结果可以试着手动改上面的default-release-2,可以改为我画红圈的后面的那个数字我这里是default-release-2,你可以改成你自己相应的default-release-xxx,第三题的同样如此

    如果后面还是没下面这些输出,可以看看浏览器是否保留Cookies

     

    import os
    import sqlite3
    def get_firfox_cookie_path():
        cookiepath_common = os.environ['APPDATA'] + r"\Mozilla\Firefox\Profiles"
        folds_arr = os.listdir(cookiepath_common)
        folds_end = [os.path.splitext(file)[-1][1:] for file in folds_arr]
        print(cookiepath_common,folds_arr)
        for i in folds_end:
            print(i)
        if 'default-release-2' in folds_end:
            cookie_fold_index = folds_end.index('default-release-2')
        else:
            cookie_fold_index = folds_end.index('default')
        cookie_fold = folds_arr[cookie_fold_index]
        cookie_path = os.path.join(cookiepath_common, cookie_fold)
        return os.path.join(cookie_path, 'cookies.sqlite')
    
    def printCookies(cookiesDB):
        try:
            conn = sqlite3.connect(cookiesDB)
            c = conn.cursor()
            c.execute('SELECT host, name, value FROM moz_cookies')
            for row in c:
                host = str(row[0])
                name = str(row[1])
                value = str(row[2])
                print ('Host: ' + host + ', Cookie: ' + name + ', Value: ' + value)
        except Exception as e:
            if 'encrypted' in str(e):
                print('Error')
    
    printCookies(get_firfox_cookie_path())

    第三题

    win10系统中火狐浏览器的书签及其访问记录存放位置为:%APPDATA%\Mozilla\Firefox\Profiles\ 目录中的xxx.default目录,名为places.sqlite的文件。

    要求:使用前两题的方法解析并打印输出win10系统中火狐浏览器的书签及其访问记录。

        主要代码:

      conn = sqlite3.connect(places.sqlite文件)

      c = conn.cursor()\

      c.execute("select url, datetime(last_visit_date/1000000, 'unixepoch'), title from moz_places;") 

    import os
    import sqlite3
    def get_firfox_cookie_path():
        cookiepath_common = os.environ['APPDATA'] + r"\Mozilla\Firefox\Profiles"
        folds_arr = os.listdir(cookiepath_common)
        folds_end = [os.path.splitext(file)[-1][1:] for file in folds_arr]
        for i in folds_end:
            print(i)
        if 'default-release-2' in folds_end:
            cookie_fold_index = folds_end.index('default-release-2')
        else:
            cookie_fold_index = folds_end.index('default')
        cookie_fold = folds_arr[cookie_fold_index]
        cookie_path = os.path.join(cookiepath_common, cookie_fold)
        return os.path.join(cookie_path, 'places.sqlite')
    
    def printCookies(cookiesDB):
        try:
            conn = sqlite3.connect(cookiesDB)
            c = conn.cursor()
            c.execute("select url, datetime(last_visit_date/1000000, 'unixepoch'), title from moz_places;")
            for row in c:
                url = str(row[0])
                datetime = str(row[1])
                title = str(row[2])
                print ('Url: ' + url + ', datatime: ' + datetime + ', title: ' + title)
        except Exception as e:
            if 'encrypted' in str(e):
                print('Error')
    
    printCookies(get_firfox_cookie_path())

    运行结果如图

    展开全文
  • python提取浏览器Cookie

    2020-12-09 10:33:49
    Request Header的内容主要用于描述本地信息,如所用的浏览器、所用的系统、语言、所能接受的返回数据的编码格式等,其中有一个非常重要的Header项就是Cookie,Cookie可以说是网站的自定义数据集。由于服...

    在用浏览器进行网页访问时,会向网页所在的服务器发送http协议的GET或者POST等请求,在请求中除了指定所请求的方法以及URI之外,后面还跟随着一段Request Header。Request Header的内容主要用于描述本地信息,如所用的浏览器、所用的系统、语言、所能接受的返回数据的编码格式等,其中有一个非常重要的Header项就是Cookie,Cookie可以说是网站的自定义数据集。由于服务器端无法无法控制本地(浏览器)的内存数据,但服务器又有必要搜集与自己所提供的服务相关的本地状态信息,而Cookie就承载了这一功能,目的是记录用户在网站的状态信息。

    在用python对网页进行访问的时候,如果希望得到与在网页端相同的结果,用该网页在浏览器中所保留的Cookie作为python的请求Cookie是一个比较值得推荐的做法。

    本文主要讨论如何提取浏览器保存在本地的Cookie,所用的浏览器为Chrome。

    Cookie文件

    Chrome用sqlite来维护Cookie,Cookie中的信息被保存在sqlite数据库当中,如果系统为Windows,那么数据库文件所在的位置为

    C:\Users\{UserName}\AppData\Local\Google\Chrome\User Data\Default\Cookies

    其中该路径的{UserName}是当前系统的用户名。

    username = os.environ.get('USERNAME')

    cookie_file = 'C:\Users\{UserName}\AppData\Local\Google\Chrome\User Data\Default\Cookies'.format(UserName=username)

    Cookie表单

    通过Cookie文件路径,我们可以建立数据库连接,然后提取出数据库的信息。

    con = sqlite3.connect(cookie_file)

    cursor = con.cursor()

    数据库中的cookies表就是用于保存浏览器Cookie的。提取表中各列的名称

    cursor.execute('SELECT * FROM cookies')

    for description in cursor.description:

    print(description[0])

    各字段的描述如下

    creation_utc:Cookie产生的utc时间

    host_key:Cookie所在的网页(domain)

    name:Cookie名称

    value:不加密的Cookie值,由于Chrome几乎都会对Cookie值加密后再存储,因此这个字段基本都是空的

    path:如果服务器需要设置Cookies,那么服务器在响应浏览器请求的时候会返回Set-Cookie的响应,并且附带所要设置的Cookies,这里的path的默认值就是返回Set-Cookie的那个页面。path以'/'为开头。

    expires_utc:Cookie的有效期限

    is_secure:指示在浏览器与服务器之间传输该Cookie时需要采用加密通道,即https

    is_httponly:当设置了该值为1时,在浏览器上运行的JS不能读取到该Cookie,该Cookie只能由http请求读取。这个标记主要目的是提高Cookie的安全性,防止无关的JS脚本窃取Cookie中的重要信息

    last_access_utc:上一次访问到该Cookie的时间

    has_expires:Cookie的期限是否有效

    is_persistent:如果expires_utc不为0,那么这个值为1

    priority:Cookie的删除优先级,Cookie也有存储上限的,当超出上限则需要删除,此时会有特定的删除策略来删除不同priority的Cookie

    encrypted_value:加密后的Cookie值

    firstpartyonly:first-party以及third-party是HTTP Request的一种分类,first-party指的是当前所发送的HTTP请求的URL跟浏览器地址栏上的URL一致;否则就是third-party。如我们平常看到的很多网页上的图片或者广告,其实都是third-party request。无论first-party或者third-party,都是HTTP请求,在往服务器发送请求的时候会带上host为该URL的Cookies,不过如果一个Cookie指定了firstpartyonly,那么如果请求为thrid-party,在发送请求的时候不会附带该Cookie。以上面所说的网页中的图片为例子,如果该图片URL的Cookie设定为firstpartyonly,在浏览网站时,通过third-party访问了该图片所在的URL,就不会发送该Cookie。

    上述字段中有些是只有浏览器才会用到的,这里没有必要用上,因此我们仅需要提取一些必要字段

    cursor.execute('SELECT host_key, name, value, path, expires_utc, is_secure, encrypted_value '

    'FROM cookies WHERE host_key like "%{}%";'.format(domain_name))

    解密Cookie

    我们前面说过,Chrome在对Cookie的值保存之前会进行加密处理,并保存在数据库的encrypt_value字段中。在Windows系统中,Cookie加密采用的是系统提供的函数CryptProtectData,我们在解密的时候也需要调用系统提供的函数CryptUnprotectData

    不过系统提供的是C函数,python通过ctypes库来实现对C函数的调用。

    CryptUnprotectData需要7个参数:

    pDataIn:一个指向DATA_BLOB结构体的指针,该DATA_BLOB内需存放被解密的数据。DATA_BLOB结构体内含两个成员:cbData,数据的所占用的字节数;pbData,指向数据所在内存的指针。

    ppszDataDescr:描述该加密数据的信息,如果在进行加密操作的时候添加了描述,那么在解密的时候也能得到该描述信息。获得该描述后需要调用系统提供的LocalFree释放ppszDataDescr指向的内存。如果不需要,设为NULL即可。

    pOptionalEntropy:一个指向含有密钥DATA_BLOB的指针,不过在进行Cookie加密时通常不会用到。

    pvReserved:保留参数,设为NULL即可。

    pPromptStruct:解密是一个有安全风险的操作,可能需要弹出风险提升,如果不需要弹出提示设置为NULL即可。

    dwFlags:安全相关的标志,设置为0即可。

    pDataOut:一个指向解密后的数据的DATA_BLOB,获得解密数据后需要调用系统提供的LocalFree函数释放pbData指向的内存。

    class DATA_BLOB(ctypes.Structure):

    _fields_ = [("cbData", ctypes.wintypes.DWORD),

    ("pbData", ctypes.POINTER(ctypes.c_char))]

    def __init__(self, data):

    string = str(data)

    self.cbData = len(string)

    self.pbData = ctypes.create_string_buffer(string)

    def descrypt(cipher):

    #parameters

    DataIn = DATA_BLOB(cipher)

    Descr = ctypes.c_wchar_p()

    DataEntropy = DATA_BLOB('')

    Reserved = None

    PromptStruct = None

    CRYPTPROTECT_UI_FORBIDDEN = 0x00

    DataOut = DATA_BLOB('')

    #win call

    ret = ctypes.windll.crypt32.CryptUnprotectData(ctypes.byref(DataIn),

    Descr,

    ctypes.byref(DataEntropy),

    Reserved,

    PromptStruct,

    CRYPTPROTECT_UI_FORBIDDEN,

    ctypes.byref(DataOut)

    )

    if not ret:

    raise RuntimeError("failed to descrypt")

    buf = ctypes.create_string_buffer(int(DataOut.cbData))

    ctypes.memmove(buf, DataOut.pbData, DataOut.cbData)

    ctypes.windll.kernel32.LocalFree(Descr)

    ctypes.windll.kernel32.LocalFree(DataOut.pbData)

    return buf.value

    创建Cookie并填充CookieJar

    python并不推荐我们去自行创建Cookie,因为作为用户通常不需要去改动,甚至没有必要知道Cookie的内容,不过此处出于特殊的需求,需要通过在Cookie数据库中获取的数据来创建Cookie。

    首先我们来简单了解一下Set-Cookie。我们知道Cookie都是服务器为浏览器设置的,设置Cookie是通过服务器返回的Response Header,如果header中包含有Set-Cookiie相关字段,则能进行Cookie的设置。

    http.cookiejar.Cookie的初始化需要提供18个参数

    version:比较老版本的Cookie(如rfc2109,已淘汰)要求Cookie必须有Version字段,不过较新的版本(如rfc6265)的Cookie去掉了这一字段,因此这里填0就行。

    name:Cookie名称

    value:Cookie值

    port:http端口,指定了该字段的Cookie只能发送到服务器的指定端口,只有rfc2965中的Set-Cookie2才用到该字段,rfc2695是一个已淘汰的版本,这里填None就行。

    port_specified:是否有指定端口,同样是已淘汰的参数,填False。

    domain:服务器域名

    domain_specified:是否指定了服务器域名

    domain_initial_dot:服务器域名是否以"."作为开头

    path:服务器路径

    path_specified:是否指定了服务器路径

    secure:是否采用安全通道

    expires:Cookie期限

    discard:是否为一次性Cookie,同上方的is_persistent,填False

    comment:Cookie注释,填None

    comment_url:Cookie注释所在的URL,填None

    rest:存储该Cookie的一些非标准的属性,填{}

    rfc2109:是否为rfc2109标准,默认值为False

    cj = http.cookiejar.CookieJar()

    for row in cursor.fetchall():

    host, name, value, path, expires, secure, encrypted_value = row[:]

    data = descrypt(encrypted_value)

    c = http.cookiejar.Cookie(0, name, data, None, False, host, host.startswith('.'), host.startswith('.'),

    path, True, secure, expires, False, None, None, {})

    cj.set_cookie(c)

    其中比较重要的domain相关参数请查看:rfc2109的Interpreting Set-Cookie、Rejecting Cookies以及rfc6265的The Domain Attribute、Storage Model

    Reference:

    展开全文
  • python获取浏览器cookies登录熊猫tv

    千次阅读 2017-05-18 22:06:38
    在C:\Users\lenovo\AppData\Local\Google\Chrome\User Data\Default路径下查找已经在chrome上登录的cookies,然后用requests访问 http://www.panda.tv/ajax_get_myinfo 获取账号信息 from os import getenv ...
  • python获取网页cookies的方法:# _*_ coding: utf-8 _*_#引用要使用到的库import requestsimport timefrom selenium import webdriverfrom selenium.webdriver.common.keys import Keys#定义好登陆使用的用户名与...
  • 很多用Python的人可能都写过网络爬虫,自动化获取网络数据确实是一件令人愉悦的事情,而Python很好的帮助我们达到这种愉悦。然而,爬虫经常要碰到各种登录、验证的阻挠,让人灰心丧气(网站:天天碰到各种各样的爬虫...
  • python3实现读取chrome浏览器cookie

    千次阅读 2020-12-09 10:35:11
    好几年前我在做一些自动化的脚本时,脑子里也闪过这样的想法:能不能直接把浏览器cookies取出来用呢?直到昨天看到代码《python模拟发送动弹》,想起来当年我也曾经有类似的想法没能完成,那就优先拿这个练手,...
  • Request Header的内容主要用于描述本地信息,如所用的浏览器、所用的系统、语言、所能接受的返回数据的编码格式等,其中有一个非常重要的Header项就是Cookie,Cookie可以说是网站的自定义数据集。由于服...
  • python 读取浏览器cookie

    2020-11-30 03:23:22
    """python3从chrome浏览器读取cookieget cookie from chrome"""import osimport sqlite3import requestsfrom win32.win32crypt import CryptUnprotectDatadef getcookiefromchrome(host='.oschina.net'):cookiepath=...
  • 在仿照《Python小练习:可视化人人好友关系》一文时,需要登录模拟登录人人网。...这时,从豆瓣讨论中找到了解决方法:1....2. 将Cookie记录下来,在Python中使用cookie模块模拟浏览器的行为;3. 取得并解析数据。1....
  • 以Chrome浏览器为例: 第一步点击Chrome右上角... 第二步点击设置,然后找到密码 第三步,展开查看:我截图的账号密码都擦除了,保密 那这是在浏览器设置中查看,那他们存储在哪里了呢?或者说我们在自己...
  • However, I think I could cut this short by accessing the existing cookies of the user's web-browser, and requesting authentication to the consumer directly with the URL. Problem: How to access the ...
  • 很多用Python的人可能都写过网络爬虫,自动化获取网络数据确实是一件令人愉悦的事情,而Python很好的帮助我们达到这种愉悦。然而,爬虫经常要碰到各种登录、验证的阻挠,让人灰心丧气(网站:天天碰到各种各样的爬虫...
  • 首先在火狐浏览器上登录知乎,然后使用火狐浏览器插件 Httpfox 获取 GET 请求的Cookie,这里注意使用状态值为 200(获取成功)的某次GET.将 Cookies 复制出来,注意这一行非常长,不要人为添加换行符。而且 Cookie 中...
  • 昨天我写了两篇博客,介绍:2) 如何解析Cookies字符串、创建CookieJar对象,自动管理Cookies的添加、更新、删除本篇顺着介绍如何在Python中使用Chrome浏览器已有的Cookies发起HTTP请求。Chrome的Cookies文件保存路径...
  • from selenium import ...# 获取cookie信息 browser = webdriver.Firefox() browser.get("http://www.youdao.com") cookie = browser.get_cookies() # 打印cookie信息 print(cookie) # 退出浏览器 browser.quit() ...
  • python获取网页cookie

    千次阅读 2022-03-18 19:17:46
    原因:xq_a_token隔段时间会刷新,...所需准备: python环境,Google游览器,对应版本的chromedriver.exe 程序修改处: 1.driver_path,修改为自己Google的application文件地址 demo如下: chromedriver.exe获取...
  • 利用selenium+phantomjs无界面浏览器的形式访问网站,再获取cookie值: from selenium import webdriver driver=webdriver.PhantomJS() url=...
  • 【爬虫】一个简单方便的获取cookie的python库雁陎•2021 年 01 月 07 日Loading...## 前言很久之前学过一点点爬虫,前几天需要爬一点资料所以又捡起来了。算是小需求所以也没用太复杂的框架,就 `Requests`+`正则` ...
  • 问题引入日常在编写一些自用爬虫时,通常为了方便是直接从浏览器的开发者工具中调取 cookies 字符串,然后再进行字典的转换供 requests 库使用。cookiesclass transCookie:def __init__(self, cookie):self.cookie =...
  • 如何使用Python获取Chrome cookie

    千次阅读 2020-12-31 17:01:46
    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 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,346
精华内容 8,538
热门标签
关键字:

python获取浏览器cookies