添加使用Firefox webdriver而不是PhantomJS的Cookie

时间:2016-05-08 18:53:35

标签: python selenium cookies web-scraping phantomjs

我有一个带有我通过以下命令创建的饼干

def doLogin(driver):
    #do login stuff
    pickle.dump(driver.get_cookies(), open("cookies.pkl", "wb"))

我有获取Cookie的示例代码

driver = webdriver.PhantomJS()
self.doLogin(driver)
driver.delete_all_cookies()
for cookie in pickle.load(open("cookies.pkl", "rb")):
    driver.add_cookie(cookie)

我可以看到它很好地创建了cookie,因为如果我print它就可以了,add_cookie()正在做阴暗的事情

这给出了以下异常

  

WebDriverException:消息:{“errorMessage”:“无法设置   饼干”, “请求”:{ “报头”:{ “接受”: “应用/ JSON”, “接受编码”: “同一性”, “连接”: “关闭”, “内容长度”: “219” , “内容类型”: “应用/ JSON;字符集= UTF-8”, “主机”: “127.0.0.1:50738","User-Agent":"Python-urllib/2.7"},"httpVersion”: “1.1”, “方法”: “POST”, “后”: “{\” 的sessionId \“:   \“391db430-154a-11e6-8a0a-ef59204729f5 \”,\“cookie \”:{\“domain \”:   \“secretWebsite \”,\“name \”:\“JSESSIONID \”,\“value \”:   \“8332B6099FA3BBBC82893D4C7E6E918B \”,\“路径\”:\“也是一个秘密\”,   \“httponly \”:false,\“secure \”:   真}} “ ”URL“: ”/曲奇“, ”urlParsed“:{ ”锚“: ”“, ”查询“: ”“, ”文件“: ”曲奇“, ”目录“: ”/“,”路径 “:”/饼干 “ ”相对的“: ”/饼干“, ”端口“: ”“, ”宿主“: ”“, ”密码“: ”“, ”用户“: ”“, ”用户信息“:” “ ”权威“: ”“, ”协议“: ”“, ”源“: ”/饼干“, ”queryKey“:{}, ”块“:[ ”饼干“]} ”urlOriginal“:”/会话/ 391db430-154a-11e6-8a0a-ef59204729f5 /曲奇“}}   屏幕截图:可通过屏幕获取

要工作,我需要的是将webdriver更改为Firefox

这是一个已知的PhantomJS问题吗?

1 个答案:

答案 0 :(得分:6)

PhantomJS驱动程序似乎不支持某些键/值。 为了解决这个问题,我会使用execute_script注入最重要的问题:

def save_cookies(driver, file_path):
    LINE = "document.cookie = '{name}={value}; path={path}; domain={domain}; expires={expires}';\n"
    with open(file_path, 'w') as file :
        for cookie in driver.get_cookies() :
            file.write(LINE.format(**cookie))

def load_cookies(driver, file_path):
    with open(file_path, 'r') as file:
        driver.execute_script(file.read())


from selenium import webdriver

driver = webdriver.PhantomJS()

# load the domain
driver.get("https://stackoverflow.com/users/login")

# save the cookies to a file
save_cookies(driver, r"cookies.js")

# delete all the cookies
driver.delete_all_cookies()

# load the cookies from the file
load_cookies(driver, r"cookies.js")