【问题标题】:Exporting session.cookies as JSON将 session.cookies 导出为 JSON
【发布时间】:2018-03-04 19:17:22
【问题描述】:

我正在编写一个使用请求与网站交互的脚本 - 在某些时候需要将 cookie 传输到 selenium 中,作为需要在 webdriver 上完成的工作的一部分。

import requests
from bs4 import BeautifulSoup
import time
import cfscrape
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

scraper = cfscrape.create_scraper()


headers = {'Referer': 'https://www.off---white.com/en/GB/login'}
payload = {
    'utf8':'✓',
    'authenticity_token':'',
    'spree_user[email]': LOGIN_EMAIL,
    'spree_user[password]': PASSWORD,
    'spree_user[remember_me]': '0',
    'commit': 'Login'
}
r = scraper.post('https://www.off---white.com/en/GB/login', data=payload, headers=headers)
if r.status_code != 200:
    print('Failed to log in')
else:
    print('Successfully logged in!')

cookiesexport = scraper.cookies

driver = webdriver.Chrome()
driver.get("https://www.off---white.com/en/GB")
time.sleep(10)
driver.add_cookie(cookiesexport)
time.sleep(2)
driver.get("https://www.off---white.com/en/GB/checkout/payment")

当我运行上面的代码时,我收到以下错误:

TypeError: Object of type 'RequestsCookieJar' is not JSON serializable

我认为这是由于 scraper.cookies 不是 JSON 格式。

我的问题是如何以 JSON 格式导出 cookie?

【问题讨论】:

  • 尝试用driver.add_cookie(cookiesexport.get_dict())替换driver.add_cookie(cookiesexport)
  • @EugeneK 我已经尝试了上述方法,它返回以下错误 - selenium.common.exceptions.WebDriverException: Message: invalid argument: missing 'name'
  • 根据documentationadd_cookie接受特定格式。你能print(cookiesexport.get_dict()) 并检查是否有add_cookie 期望的格式吗?
  • 另外,请记住 add_cookie 一次接受一个 cookie,所以如果你有很多,你应该一个一个地添加它们。
  • @EugeneK 我必须到我的 cookieexport 打印以下 {'_hs_session_v3': 'RANDOM_STRING'}。当我尝试将此 cookie 添加到 selenium 时,我得到以下信息。 selenium.common.exceptions.WebDriverException:消息:无效参数:缺少“名称”

标签: python python-3.x selenium-webdriver python-requests


【解决方案1】:

scraper 转换cookies

cookies = [{'name': key, 'value': value} for key, value in cookiesexport.iteritems()}]
for cookie in cookies:
    driver.add_cookie(cookie)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2013-06-01
    • 2011-07-26
    • 2020-12-17
    相关资源
    最近更新 更多