Python selenium加载cookie错误

时间:2018-01-08 21:05:46

标签: python selenium cookies

我正在尝试将以前保存的Cookie加载到新的浏览器会话中。

import pickle
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def load_cookies(browser):
    with open("cookies.pickle", "rb") as cookie_file:
        cookies = pickle.load(cookie_file)
        for cookie in cookies:
            browser.add_cookie(cookie)

def save_cookies(browser):
    with open("cookies.pickle", "wb") as cookies_file:
        pickle.dump(webbrowser.get_cookies(), cookies_file)

webbrowser = webdriver.Firefox()
webbrowser.get('https://www.google.com.ua')
time.sleep(6)
#save_cookies(webbrowser)
#load_cookies(webbrowser)
webbrowser.quit()

当我调用保存cookie的功能一切正常时,会创建带有cookie的文件。但是如果我在相同的代码中调用函数load_cookies(取消注释load_cookies,注释save_cookies)我得到了下一个错误消息:

Traceback (most recent call last):
  File "F:\code\fifa\stoverflow.py", line 23, in <module>
    load_cookies(webbrowser)
  File "F:\code\fifa\stoverflow.py", line 14, in load_cookies
    browser.add_cookie(cookie)
  File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 775, in add_cookie
    self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})
  File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 311, in execute
    self.error_handler.check_response(response)
  File "C:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 237, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidCookieDomainException: Message: .google.com.ua

无法真正理解我做错了什么。根据我的理解,我在同一个域名我保存饼干,也许我错了。如果没有,将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

对于我的问题,这不是确切的答案,但我已经找到了解决方法。我需要cookie,因为默认情况下selenium firefox驱动程序会在每次启动时加载新的空白配置文件。没有保存登录等。所以我的第一个想法是在每次会话后保存cookie,然后在每次新会话时加载它们。 但是它有一些简单的方法。您只需加载一些已在PC上使用的配置文件,即可访问以前保存的cookie。 这是代码如何加载firefox配置文件,希望它可能会帮助某人:

path = 'C:\\users\\...' #enter here your PATH TO PROFILE, usually it is in 
                        #AppData folder and should ends like that:    
                        #...Mozilla\\Firefox\\Profiles\\urprofile'
fox_profile = webdriver.FirefoxProfile(path)
webbrowser = webdriver.Firefox(fox_profile)

你很高兴用旧的配置文件而不是空的配置文件。希望它对某人有所帮助。