使用 add_cookie 时 WebDrive 出现奇怪的异常

strange exception in WebDrive when add_cookie is used

我的代码是这样的:

response = urllib2.urlopen(request)
cookieValue = response.info()["Set-Cookie"]
cookie = {'Set-Cookie': cookieValue}

driver = webdriver.Chrome()
driver.get(innerPageOfTheSameRequest)
print cookie
driver.add_cookie(cookie)

cookie 按预期打印:

{'Set-Cookie': 'SessionID_R3=dXM0ChrdPhYUhfL1drI2eP9r6Wjha8tX943Sv8CZp0v6LQ2v1/m u3y/h839tX0zGJ36VtBsIY4EJaxlr78g9gokEfz6HA7wvXb7ECo8nRjXjO0+Ty/E5IC64BseItDk; pa th=/; HttpOnly;'}

但是我在最后一行得到了一个例外:

Traceback (most recent call last): File "p.py", line 80, in driver.add_cookie(cookie) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 634, in add_cookie self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict}) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute self.error_handler.check_response(response) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py" , line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: name of cookie is missing or invalid:"undefined" (Session info: chrome=48.0.2564.116) (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Windows NT 6.1 SP1 x86_64)

有人可以帮助我了解我做错了什么吗? 谢谢

您的 cookie 格式不正确。根据 the documentation add_cookie() 的参数是

cookie_dict: A dictionary object, with required keys - “name” and “value”;

您没有这两个键,而是有一个 Set-Cookie header。

你的 cookie 应该是

{'name': SessionID_R3,
 'value' : 'dXM0ChrdPhYUhfL1drI2eP9r6Wjha8tX943Sv8CZp0v6LQ2v1/m u3y/h839tX0zGJ36VtBsIY4EJaxlr78g9gokEfz6HA7wvXb7ECo8nRjXjO0+Ty/E5IC64BseItDk',
 'path' : '/'}

我不确定您是否可以获得 HttpOnly,因为文档中没有提到它。

我使用类似

的代码遇到了同样的错误
pickle.dump(driver.get_cookies(), open(cookie_file, "wb"))
cookies = pickle.load(open(cookie_file, "rb"))
driver.add_cookie(cookies)

我没有密切注意我有 cookie 还是有很多 cookies

for c in cookies:
    driver.add_cookie(c)

问题已解决。 HttpOnly 是一个转移注意力的问题。 add_cookie 用那个键和许多其他键接受了命令。