Сохранение файлов cookie в файл и повторное использование в python для веб-драйвера Selen - объект списка кодирования - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь прочитать куки из сеанса и сохранить их в файл (я сохраняю их как файл Python Pickle) и использовать его в следующий раз, вместо того, чтобы снова войти в приложение. Это экономит много времени. Я использую Python 2.7.16rc1 и Selen версии веб-драйвера 3.14.1.

Я попытался сохранить файл cookie, полученный из driver.get_cookies(). Проблема заключается в том, что файлы cookie сохраняются в засоленном объекте с кодировкой Unicode с `u в нем, которая вызывает проблему при чтении и отправке обратно.

Я пытался разобраться с опцией кодировки Unicode, читая значение в списке по одному и применяя кодировку UTF-8, но получая AttributeError: 'dict' object has no attribute 'encode'

Ниже приведен код для записи файлов cookie в файл маринада

pickle.dump(driver.get_cookies(), open("cookie.fkle","w"))

В следующих кодах это читается

import pickle

cookies = pickle.load(open("cookie.fkle", "rb"))
for cookie in cookies:
    print cookie 

Я ожидаю вывод, как показано ниже

{domain': google.com', name': lang', value': en', expiry': 1555427577, path': /', httpOnly': False, secure': False}
{domain': .google.com', name': _ga', value': GA1.2.1834438095.1554822783', expiry': 1617894782, path': /', httpOnly': False, secure': False}
{domain': .google.com', name': _gid', value': GA1.2.1839091575.1554822783', expiry': 1554909182, path': /', httpOnly': False, secure': False}
{domain': .google.com', name': _gat_gtag_UA_60214108_5', value': 1', expiry': 1554822842, path': /', httpOnly': False, secure': False}

Но я получаю вывод как:

{u'domain': u'google.com', u'name': u'lang', u'value': u'en', u'expiry': 1555427577, u'path': u'/', u'httpOnly': False, u'secure': False}
{u'domain': u'.google.com', u'name': u'_ga', u'value': u'GA1.2.1834438095.1554822783', u'expiry': 1617894782, u'path': u'/', u'httpOnly': False, u'secure': False}
{u'domain': u'.google.com', u'name': u'_gid', u'value': u'GA1.2.1839091575.1554822783', u'expiry': 1554909182, u'path': u'/', u'httpOnly': False, u'secure': False}
{u'domain': u'.google.com', u'name': u'_gat_gtag_UA_60214108_5', u'value': u'1', u'expiry': 1554822842, u'path': u'/', u'httpOnly': False, u'secure': False}

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

M.R

Большое спасибо

Однако я немного подправил ответ

output.update({str(key).encode('utf-8'): str(input_dict[key]).encode('utf-8')}) когда я получал AttributeError: у объекта 'int' нет атрибута 'закодировать' словарь Python

0 голосов
/ 10 апреля 2019

Вы не можете просто кодировать или декодировать словарь, вам нужно перебирать каждый ключ и значение и заменять их на закодированные. Также для дампа вам нужно открыть файл в двоичном режиме и есть хороший пример :

pickle.dump(driver.get_cookies(), open("cookie.fkle","wb"))

Простой способ - просто закодировать каждую строку (представленную в виде словаря) внутри функции. Примерно так:

import pickle

def encode_dict(input_dict):
    output = {}
    for key in input_dict:
        output.update({key.encode('utf-8'): input_dict[key].encode('utf-8')})
    return output

cookies = pickle.load(open("cookie.fkle", "rb"))
for cookie in cookies:
    print encode_dict(cookie)
...