一尘不染

添加使用Firefox Webdriver的Cookie,但不能在PhantomJS中使用

selenium

我有一个泡菜,里面有我通过以下命令创建的cookie

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: Message: {“errorMessage”:”Unable to set Cookie”,”request”:{“headers”:{“Accept”:”application/json”,”Accept-Encoding”:”identity”,”Connection”:”close”,”Content-Length”:”219”,”Content-Type”:”application/json;charset=UTF-8”,”Host”:”127.0.0.1:50738”,”User-Agent”:”Python-urllib/2.7”},”httpVersion”:”1.1”,”method”:”POST”,”post”:”{"sessionId": "391db430-154a-11e6-8a0a-ef59204729f5", "cookie": {"domain": "secretWebsite", "name": "JSESSIONID", "value": "8332B6099FA3BBBC82893D4C7E6E918B", "path": "Also a secret", "httponly": false, "secure": true}}”,”url”:”/cookie”,”urlParsed”:{“anchor”:”“,”query”:”“,”file”:”cookie”,”directory”:”/”,”path”:”/cookie”,”relative”:”/cookie”,”port”:”“,”host”:”“,”password”:”“,”user”:”“,”userInfo”:”“,”authority”:”“,”protocol”:”“,”source”:”/cookie”,”queryKey”:{},”chunks”:[“cookie”]},”urlOriginal”:”/session/391db430-154a-11e6-8a0a-ef59204729f5/cookie”}} Screenshot: available via screen

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

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


阅读 277

收藏
2020-06-26

共1个答案

一尘不染

似乎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")
2020-06-26