Python: как использовать файлы cookie Chrome в запросах - PullRequest
0 голосов
/ 17 апреля 2019

Я ищу способ получить мои куки из моего браузера Chrome (по умолчанию) и использовать его с помощью запросов.

Я, конечно, уже искал вокруг, и нашел, например, это; Как получить куки из веб-браузера с Python? Но это больше не работает, потому что Chrome продолжает обновляться. И модули, которые они назвали в ответе, были в последний раз протестированы в 2016 году.

Итак, код, который они дали в ответе, был + мои дополнительные вещи, чтобы вернуть куки

import win32crypt
import browsercookie
import requests

session = requests.Session()
cj = browsercookie.chrome()
r = session.get("https://stackoverflow.com/", cookies=cj)
print session.cookies.get_dict()

Но когда я запускаю это (при входе в stackoverflow в моем браузере), он возвращает {}. И это не так много (не тот результат, которого я ожидал)

1 Ответ

0 голосов
/ 08 июля 2019

У меня есть хороший скрипт для чтения файлов cookie Chrome непосредственно на / Default / Cookies .Я думаю, вы бы хорошо работали.

import sqlite3
import sys
from os import getenv, path
import os
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2
import keyring

def get_cookies(url, cookiesfile):

    def chrome_decrypt(encrypted_value, key=None):
        dec = AES.new(key, AES.MODE_CBC, IV=iv).decrypt(encrypted_value[3:])
        decrypted = dec[:-dec[-1]].decode('utf8')
        return decrypted

    cookies = []
    if sys.platform == 'win32':
        import win32crypt
        conn = sqlite3.connect(cookiesfile)
        cursor = conn.cursor()
        cursor.execute(
            'SELECT name, value, encrypted_value FROM cookies WHERE host_key == "' + url + '"')
        for name, value, encrypted_value in cursor.fetchall():
            if value or (encrypted_value[:3] == b'v10'):
                cookies.append((name, value))
            else:
                decrypted_value = win32crypt.CryptUnprotectData(
                    encrypted_value, None, None, None, 0)[1].decode('utf-8') or 'ERROR'
                cookies.append((name, decrypted_value))

    elif sys.platform == 'linux':
        my_pass = 'peanuts'.encode('utf8')
        iterations = 1
        key = PBKDF2(my_pass, salt, length, iterations)
        conn = sqlite3.connect(cookiesfile)
        cursor = conn.cursor()
        cursor.execute(
            'SELECT name, value, encrypted_value FROM cookies WHERE host_key == "' + url + '"')
        for name, value, encrypted_value in cursor.fetchall():
            decrypted_tuple = (name, chrome_decrypt(encrypted_value, key=key))
            cookies.append(decrypted_tuple)
    else:
        print('This tool is only supported by linux and Mac')

    conn.close()
    return cookies


if __name__ == '__main__':
    pass
else:
    salt = b'saltysalt'
    iv = b' ' * 16
    length = 16

#get_cookies('YOUR URL FROM THE COOKIES', 'YOUR PATH TO THE "/Default/Cookies" DATA')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...