在请求前获取cookie

一、selenium

关键代码:
from selenium import webdriver user_data_dir = r"C:\Users\Administrator\AppData\Local\Google\Chrome\User Data" user_option = webdriver.ChromeOptions() user_option.add_argument(f'--user-data-dir={user_data_dir}') # 初始化浏览器驱动 driver = webdriver.Chrome(options=user_option) # 打开网页 url = 'https://www.bilibili.com' driver.get(url=url) # 获取浏览器Cookies cookies = driver.get_cookies() # 打印Cookies for cookie in cookies: print(cookie) # 关闭浏览器 driver.quit()
局限:需要关闭浏览器

二、Playwright

# 下载并安装 pip install playwright python -m playwright install
关键代码:
from playwright.sync_api import sync_playwright import os import time def get_cookies(): with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 或 .launch() 不显示界面 page = browser.new_page() url = 'https://www.bilibili.com/video/BV1jt421c7yN/' page.goto(url) # 获取cookie cookies = page.context.cookies() # 构建cookie字符串 cookie_str = "; ".join([f"{cookie['name']}={cookie['value']}" for cookie in cookies]) print(cookie_str) os.system("pause") browser.close() get_cookies()
局限:没有像 Selenium 那样的 --user-data-dir 选项来直接使用已有的浏览器用户数据 解决:
方法 1:导入现有的 Cookies
你可以手动从浏览器中导出 Cookies,然后将其加载到 Playwright 中。虽然不能直接使用 --user-data-dir,但你可以通过以下步骤导出 Cookies:
  1. 从浏览器导出 Cookies:
      • 使用开发者工具获取当前登录状态的 Cookies(类似你之前手动复制的方法)。
  1. 将 Cookies 导入到 Playwright
    1. 通过 Playwrightcontext.add_cookies() 方法将这些 Cookies 注入到浏览器会话中。
示例代码:
from playwright.sync_api import sync_playwright def load_cookies(): # 定义你从浏览器开发者工具复制的 Cookies cookies = [ {'name': 'buvid3', 'value': 'E6EAEE80-BEEF-0139-277A-E832101F5C9538820infoc', 'domain': '.bilibili.com', 'path': '/', 'secure': True}, {'name': 'b_nut', 'value': '1735612938', 'domain': '.bilibili.com', 'path': '/', 'secure': True}, # 在此处继续添加其他 Cookies ] return cookies def get_cookies_from_browser(): with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 或 .launch() 不显示界面 context = browser.new_context() # 加载之前保存的 cookies cookies = load_cookies() context.add_cookies(cookies) page = context.new_page() url = 'https://www.bilibili.com/video/BV1jt421c7yN/' page.goto(url) # 获取并打印 Cookies cookies = context.cookies() cookie_str = "; ".join([f"{cookie['name']}={cookie['value']}" for cookie in cookies]) print(cookie_str) # 关闭浏览器 browser.close() get_cookies_from_browser()

说明:

  1. 手动导出 Cookies: 你需要手动从浏览器中导出当前会话的 Cookies(通过浏览器开发者工具的 Application > Cookies 面板)。
  1. 导入 Cookies: context.add_cookies() 方法允许你将导出的 Cookies 加载到 Playwright 中。你可以使用这些 Cookies 来模拟已经登录的状态。
方法 2:使用保存的 LocalStorageSessionStorage
如果登录信息保存在 LocalStorageSessionStorage 中(某些网站可能会这样做),你也可以通过 Playwright 导入这些存储内容。类似地,你可以将它们提取出来并在脚本中加
from playwright.sync_api import sync_playwright def get_local_storage_data(): # 从浏览器获取 LocalStorage 数据(可以从开发者工具中获取) return { 'key1': 'value1', 'key2': 'value2', # 继续添加 } def get_storage_from_browser(): with sync_playwright() as p: browser = p.chromium.launch(headless=False) context = browser.new_context() # 获取 LocalStorage 数据 local_storage = get_local_storage_data() page = context.new_page() # 注入 LocalStorage 数据 for key, value in local_storage.items(): page.evaluate(f"window.localStorage.setItem('{key}', '{value}')") url = 'https://www.bilibili.com/video/BV1jt421c7yN/' page.goto(url) # 获取并打印 Cookies cookies = context.cookies() cookie_str = "; ".join([f"{cookie['name']}={cookie['value']}" for cookie in cookies]) print(cookie_str) browser.close() get_storage_from_browser()