gpt4 book ai didi

python - 将 cookie 加载到 Python 请求 session 时出错

转载 作者:行者123 更新时间:2023-12-02 00:48:36 25 4
gpt4 key购买 nike

我正在尝试将 cookie 从 selenium 导出的 cookie 加载到 Python 中的请求 session 中,但是当我这样做时,它会返回以下错误:
“'list' 对象没有属性 'extract_cookies'”

def load_cookies(filename):
with open(filename, 'rb') as f:
return pickle.load(f)

initial_state= requests.Session()
initial_state.cookies=load_cookies(time_cookie_file)
search_requests = initial_state.get(search_url)

我在任何地方都看到这应该可以工作,但是我的 cookie 是一个字典列表,这是我理解所有 cookie 的内容,以及为什么我认为这适用于 Selenium。但是由于某种原因,它不适用于请求,这方面的任何和所有帮助都会非常棒,感觉就像我错过了一些明显的东西!

Cookie 已使用以下方法从 Selenium 中转储:
with open("Filepath.pkl", 'wb') as f:
pickle.dump(driver.get_cookies(), f)

cookie 的一个例子是(稍微混淆):
[{'domain': '.website.com',
'expiry': 1640787949,
'httpOnly': False,
'name': '_ga',
'path': '/',
'secure': False,
'value': 'GA1.2.1111111111.1111111111'},
{'domain': 'website.com',
'expiry': 1585488346,
'httpOnly': False,
'name': '__pnahc',
'path': '/',
'secure': False,
'value': '0'}]

我现在已经设法按照下面的答案加载了 cookie,但是似乎没有正确加载 cookie,因为它们不记得任何内容,但是如果我在通过 Selenium 浏览时加载 cookie,它们可以正常工作。

最佳答案

曲奇饼

Cookie HTTP 请求头包含存储的 HTTP cookie先前由服务器发送的 Set-Cookie标题。一个 HTTP cookie是服务器发送到用户 Web 浏览器的一小段数据。浏览器可能会存储 cookies 并将其与下一个请求一起发送回同一台服务器。通常,判断两个请求是否来自同一个浏览器,让用户保持登录状态。

使用 Selenium 进行演示

使用 Selenium 演示 cookie 的使用我们已使用 存储 cookie一旦用户登录网站http://demo.guru99.com/test/cookie/selenium_aut.php .在下一步中,我们打开了同一个网站,添加了 cookie 并能够以登录用户的身份登陆。

  • 用于存储 cookie 的代码块:
    from selenium import webdriver
    import pickle

    options = webdriver.ChromeOptions()
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('http://demo.guru99.com/test/cookie/selenium_aut.php')
    driver.find_element_by_name("username").send_keys("abc123")
    driver.find_element_by_name("password").send_keys("123xyz")
    driver.find_element_by_name("submit").click()
    pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
  • 使用存储的 cookie 进行自动身份验证的代码块:
    from selenium import webdriver
    import pickle

    options = webdriver.ChromeOptions()
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('http://demo.guru99.com/test/cookie/selenium_aut.php')
    cookies = pickle.load(open("cookies.pkl", "rb"))
    for cookie in cookies:
    driver.add_cookie(cookie)
    driver.get('http://demo.guru99.com/test/cookie/selenium_cookie.php')


  • 使用请求的演示

    使用 演示 cookie 的使用和 我们访问了网站 https://www.google.com ,添加了一个新的 cookie 字典:
    {'name':'my_own_cookie','value': 'debanjan' ,'domain':'.stackoverflow.com'}

    接下来,我们使用相同的请求 session 发送另一个成功的请求,如下所示:
  • 代码块:
    import requests

    s1 = requests.session()
    s1.get('https://www.google.com')
    print("Original Cookies")
    print(s1.cookies)
    print("==========")
    cookie = {'name':'my_own_cookie','value': 'debanjan' ,'domain':'.stackoverflow.com'}
    s1.cookies.update(cookie)
    print("After new Cookie added")
    print(s1.cookies)
  • 控制台输出:
    Original Cookies
    <RequestsCookieJar[<Cookie 1P_JAR=2020-01-21-14 for .google.com/>, <Cookie NID=196=NvZMMRzKeV6VI1xEqjgbzJ4r_3WCeWWjitKhllxwXUwQcXZHIMRNz_BPo6ujQduYCJMOJgChTQmXSs6yKX7lxcfusbrBMVBN_qLxLIEah5iSBlkdBxotbwfaFHMd-z5E540x02-YZtCm-rAIx-MRCJeFGK2E_EKdZaxTw-StRYg for .google.com/>]>
    ==========
    After new Cookie added
    <RequestsCookieJar[<Cookie domain=.stackoverflow.com for />, <Cookie name=my_own_cookie for />, <Cookie value=debanjan for />, <Cookie 1P_JAR=2020-01-21-14 for .google.com/>, <Cookie NID=196=NvZMMRzKeV6VI1xEqjgbzJ4r_3WCeWWjitKhllxwXUwQcXZHIMRNz_BPo6ujQduYCJMOJgChTQmXSs6yKX7lxcfusbrBMVBN_qLxLIEah5iSBlkdBxotbwfaFHMd-z5E540x02-YZtCm-rAIx-MRCJeFGK2E_EKdZaxTw-StRYg for .google.com/>]>


  • 结论

    很明显,新增的cookie字典 {'name':'my_own_cookie','value': 'debanjan' ,'domain':'.stackoverflow.com'}在第二个请求中几乎使用了。

    将 Selenium Cookie 传递给 Python 请求

    现在,如果您的用例是将 Selenium Cookie 传递给 Python 请求,您可以使用以下解决方案:
    from selenium import webdriver
    import pickle
    import requests

    options = webdriver.ChromeOptions()
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('http://demo.guru99.com/test/cookie/selenium_aut.php')
    driver.find_element_by_name("username").send_keys("abc123")
    driver.find_element_by_name("password").send_keys("123xyz")
    driver.find_element_by_name("submit").click()

    # Storing cookies through Selenium
    pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
    driver.quit()

    # Passing cookies to Session
    session = requests.session() # or an existing session
    with open('cookies.pkl', 'rb') as f:
    session.cookies.update(pickle.load(f))
    search_requests = session.get('https://www.google.com/')
    print(session.cookies)

    关于python - 将 cookie 加载到 Python 请求 session 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59532784/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com