【问题标题】:Saving cookies to file and reusing in selenium web driver python -- Encoding list object将cookies保存到文件并在selenium web驱动程序python中重用——编码列表对象
【发布时间】:2019-04-10 05:28:28
【问题描述】:

我正在尝试从会话中读取 cookie 并将其保存在文件中(我将其保存为 python pickle 文件)并下次使用它,而不是再次登录应用程序。它节省了很多时间。我正在使用 Python 2.7.16rc1 和 selenium Web 驱动程序版本 3.14.1。

我尝试保存从driver.get_cookies() 获得的cookie。问题是 cookie 保存在使用 Unicode 编码的腌制对象中,其中包含 `u,这会在读取它并将其发送回时导致问题。

我试图通过一一读取列表中的值并应用 UTF-8 编码但得到 AttributeError: 'dict' object has no attribute 'encode'

来处理 Unicode 编码选项

下面给出的是将cookies写入pickle文件的代码

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}

【问题讨论】:

    标签: python python-2.7 selenium-webdriver


    【解决方案1】:

    您不能简单地对字典进行编码或解码,您需要遍历每个键和值并用编码的键和值替换它们。 也为了转储,你需要以二进制模式打开文件并且有一个good example:

    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)
    

    【讨论】:

      【解决方案2】:

      M.R

      非常感谢

      不过我稍微调整了一下答案

      output.update({str(key).encode('utf-8'): str(input_dict[key]).encode('utf-8')}) 我得到一个 AttributeError: 'int' object has no attribute 'encode' python dictionary

      【讨论】:

        猜你喜欢
        • 2023-03-13
        • 2016-10-19
        • 2015-02-07
        • 1970-01-01
        • 2016-08-02
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多