【问题标题】:get cookies for www subdomain, or a particular domain?获取 www 子域或特定域的 cookie?
【发布时间】:2021-03-22 13:10:25
【问题描述】:

我正在我的 selenium 网络驱动程序上调用 get_cookies()。当然,我们知道这会获取当前域的 cookie。但是,许多热门网站在 example.com 和 www.example.com 上都设置了 cookie。

从技术上讲,它并不是真正的“独立域”甚至子域。我认为互联网上几乎每个网站在 www 子域和根域中都有相同的站点。

既然一个是子域,那么是否仍然无法为两个域保存 cookie?如果您想为所有域保存 cookie,我知道答案很复杂,但我认为这有点不同,因为它们确实是同一个域。

用这段代码复制它:

from selenium import webdriver
import requests

driver = webdriver.Firefox()

driver.get("https://www.instagram.com/")

print(driver.get_cookies())

输出:

[{'name': 'ig_did', 'value': 'F5FDFBB0-7D13-4E4E-A100-C627BD1998B7', 'path': '/', 'domain': '.instagram.com', 'secure': True, 'httpOnly': True, 'expiry': 1671083433}, {'name': 'mid', 'value': 'X9hOqQAEAAFWnsZg8-PeYdGqVcTU', 'path': '/', 'domain': '.instagram.com', 'secure': True, 'httpOnly': False, 'expiry': 1671083433}, {'name': 'ig_nrcb', 'value': '1', 'path': '/', 'domain': '.instagram.com', 'secure': True, 'httpOnly': False, 'expiry': 1639547433}, {'name': 'csrftoken', 'value': 'Yy8Bew6500BinlUcAK232m7xPnhOuN4Q', 'path': '/', 'domain': '.instagram.com', 'secure': True, 'httpOnly': False, 'expiry': 1639461034}]

然后在新的浏览器实例中加载页面并检查自己。你会看到 www 在那里。

虽然主域看起来不错:

【问题讨论】:

  • 在 Firefox 上尝试过 instagram,它没有 www.instagram.com cookie。只有 Chrome 可以。另外,如果您想获取其他站点的 cookie 而不是当前站点,那是不可能的。您需要使用 Chrome 并解析 SQLite 文件中的加密 cookie。

标签: python selenium


【解决方案1】:

我的想法是使用 requests 库并通过 REST 查询获取所有 cookie?

    import requests 
  
# Making a get request 
response = requests.get('https://www.instagram.com/') 
  
# printing request cookies 
print(response.cookies) 

【讨论】:

  • javascript 渲染怎么样?
【解决方案2】:

要在 Internet 上托管您的应用程序,需要一个域名。域名充当称为 IP 地址的复杂数字字符串的占位符。例如,

https://www.instagram.com/

随着最新的 v84.0 访问Instagram 应用程序,在https://www.instagram.com 域中观察到以下cookie:


子域

subdomain 是您主域名的附加组件。例如,当使用网站时,例如Craigslist,您总是使用像reno.craigslist.orgsfbay.craigslist.org 这样的子域。您将被自动转发到与您的物理位置对应的子域。从本质上讲,子域是您网站的一个单独部分,在相同的主域名下运行。


重复使用 cookie

如果您存储了来自域 example.com 的 cookie,这些存储的 cookie不能通过 webdriver 会话推送到任何其他不同的域,例如example.edu。存储的 cookie 只能在 example.com 内使用。此外,为了将来自动登录用户,您只需存储一次 cookie,即用户登录时。在添加回 cookie 之前,您需要浏览到收集 cookie 的同一域。


演示

例如,一旦用户在应用程序中登录,您就可以存储 cookie,如下所示:

from selenium import webdriver
import pickle

driver = webdriver.Chrome()
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 the cookies
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
driver.quit()

以后任何时候如果你想让用户自动登录,你需要先浏览到特定的域/url,然后你必须添加cookies,如下所示:

from selenium import webdriver
import pickle

driver = webdriver.Chrome()
driver.get('http://demo.guru99.com/test/cookie/selenium_aut.php')

# loading the stored cookies
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
    # adding the cookies to the session through webdriver instance
    driver.add_cookie(cookie)
driver.get('http://demo.guru99.com/test/cookie/selenium_cookie.php')

参考

您可以在以下位置找到详细讨论:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2015-05-03
    • 1970-01-01
    • 2015-10-16
    • 2015-01-18
    相关资源
    最近更新 更多