如何将selenium.webdriver.get_cookies()转换为cookie文本文件以与pycurl

时间:2016-06-01 04:32:38

标签: python selenium curl cookies

selenium.webdriver.get_cookies()给了我两个值/对的词典。我假设这些词典中的每一个都是一个cookie。如何将这些cookie写入一个文本文件,该文件将使用以下代码将cookie从cookie.txt文件加载到卷曲会话?

p = pycurl.Curl()
cookiefile = open('cookie.txt', 'r')
p.setopt(pycurl.URL, my_url)
p.setopt(pycurl.COOKIEFILE, cookiefile)
p.perform()

有没有更好的方法将Cookie从selenium会话转移到卷曲会话以进行文件下载?我看到关于使用pickle的帖子,但是在上面的代码中使用pickle.dump()生成的文件作为cookiefile会导致以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: invalid arguments to setopt

我认为这是因为该文件只是python字典的二进制转储而不是格式正确的文本文件。如何将这两个词典写入pycurl可以读取和使用的文本文件?我在RFC6265中找到了一些信息:

  

每个cookie都以名称 - 值对开头,后跟零或更多   属性 - 值对。

selenium.webdriver.get_cookies()中的每个字典都有name和value属性以及其他属性。如何将这些格式化为格式正确的cookie.txt文件?我不确定RFC6265中的语法描述:

set-cookie-header = "Set-Cookie:" SP set-cookie-string
set-cookie-string = cookie-pair *( ";" SP cookie-av )
cookie-pair       = cookie-name "=" cookie-value
...
path-av           = "Path=" path-value

所以它会像

一样开始
Set Cookie: ASP.NET_SessionId=4jqhjdiq9k12ry45ahqtux3e (path=/; secure=False; httpOnly=True; domain=www.domain.com)

然后是另一行以Set Cookie开头:第二个字典的名称和值后面跟着括号中的附加属性?

2 个答案:

答案 0 :(得分:0)

自问这个问题后我发现的所有内容都指向了这个问题的答案:https://unix.stackexchange.com/questions/36531/format-of-cookies-when-using-wget,也是我问题的答案(https://curl.haxx.se/docs/http-cookies.html说curl使用netscape cookie格式)。

答案 1 :(得分:0)

使用此代码

我使用的是请求,而不是pycurl,但我认为这会对您有所帮助。

cookies_list = driver.get_cookies()
cookies_dict = []
for cookie in cookies_list:
    cookies_dict.append([cookie['name'],cookie['value']])
cookies_dict = dict(cookies_dict)

requests.get(URL, cookies=cookies_dict)

这将起作用。