如何编写Cookie导出导入脚本

wen 实用脚本 21

本文目录导读:

如何编写Cookie导出导入脚本

  1. 使用Python的requests库
  2. 使用浏览器扩展开发(Chrome)
  3. 使用Node.js
  4. 使用Selenium(浏览器自动化)
  5. 命令行工具(Python)
  6. 使用建议

我来为您介绍如何编写Cookie导出导入脚本,这里提供几种常见方法的实现:

使用Python的requests库

导出Cookie

import requests
import json
import pickle
# 导出Cookie到文件(两种格式)
# 方法1:保存为JSON格式
def export_cookies_jsons(session, filename='cookies.json'):
    cookies = session.cookies.get_dict()
    with open(filename, 'w') as f:
        json.dump(cookies, f)
    print(f"Cookies已导出到 {filename}")
# 方法2:使用pickle保存完整的CookieJar
def export_cookies_pickle(session, filename='cookies.pkl'):
    with open(filename, 'wb') as f:
        pickle.dump(session.cookies, f)
    print(f"Cookies已导出到 {filename}")
# 使用示例
session = requests.Session()
# ... 进行登录操作 ...
session.post('https://example.com/login', data={'username': 'user', 'password': 'pass'})
# 导出Cookie
export_cookies_json(session)
export_cookies_pickle(session)

导入Cookie

# 从JSON文件导入Cookie
def import_cookies_from_json(session, filename='cookies.json'):
    with open(filename, 'r') as f:
        cookies = json.load(f)
    # 将Cookie设置到session中
    for name, value in cookies.items():
        session.cookies.set(name, value)
    print(f"从 {filename} 导入Cookies成功")
# 从pickle文件导入Cookie
def import_cookies_from_pickle(session, filename='cookies.pkl'):
    with open(filename, 'rb') as f:
        cookies = pickle.load(f)
    session.cookies.update(cookies)
    print(f"从 {filename} 导入Cookies成功")
# 使用示例
new_session = requests.Session()
import_cookies_from_json(new_session)
# 或
import_cookies_from_pickle(new_session)

使用浏览器扩展开发(Chrome)

导出脚本

// 导出所有Cookie
function exportCookies() {
    const cookies = [];
    chrome.cookies.getAll({}, function(allCookies) {
        allCookies.forEach(cookie => {
            cookies.push({
                name: cookie.name,
                value: cookie.value,
                domain: cookie.domain,
                path: cookie.path,
                secure: cookie.secure,
                httpOnly: cookie.httpOnly,
                sameSite: cookie.sameSite
            });
        });
        // 创建下载
        const blob = new Blob([JSON.stringify(cookies, null, 2)], {type: 'application/json'});
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = `cookies_${new Date().getTime()}.json`;
        a.click();
        URL.revokeObjectURL(url);
    });
}

导入脚本

// 导入Cookie文件
function importCookies(file) {
    const reader = new FileReader();
    reader.onload = function(e) {
        const cookies = JSON.parse(e.target.result);
        cookies.forEach(cookie => {
            chrome.cookies.set({
                url: `https://${cookie.domain}${cookie.path}`,
                name: cookie.name,
                value: cookie.value,
                domain: cookie.domain,
                path: cookie.path,
                secure: cookie.secure,
                httpOnly: cookie.httpOnly,
                sameSite: cookie.sameSite
            });
        });
        console.log(`成功导入 ${cookies.length} 个Cookie`);
    };
    reader.readAsText(file);
}

使用Node.js

const axios = require('axios');
const fs = require('fs').promises;
const { CookieJar } = require('tough-cookie');
// 导出Cookie
async function exportCookies(jar, filename = 'cookies.json') {
    const cookies = await jar.getCookies('https://example.com');
    const cookieData = cookies.map(cookie => ({
        key: cookie.key,
        value: cookie.value,
        domain: cookie.domain,
        path: cookie.path,
        secure: cookie.secure,
        httpOnly: cookie.httpOnly
    }));
    await fs.writeFile(filename, JSON.stringify(cookieData, null, 2));
    console.log(`Cookies已导出到 ${filename}`);
}
// 导入Cookie
async function importCookies(jar, filename = 'cookies.json') {
    const data = await fs.readFile(filename, 'utf8');
    const cookieData = JSON.parse(data);
    for (const cookie of cookieData) {
        await jar.setCookie(
            `${cookie.key}=${cookie.value}`,
            `https://${cookie.domain}${cookie.path}`
        );
    }
    console.log(`从 ${filename} 导入Cookies成功`);
}
// 使用示例
const jar = new CookieJar();
// 导出
await exportCookies(jar);
// 导入
await importCookies(jar);

使用Selenium(浏览器自动化)

from selenium import webdriver
import json
import pickle
# 导出Cookie
def export_cookies_selenium(driver, filename='cookies.json'):
    cookies = driver.get_cookies()
    with open(filename, 'w') as f:
        json.dump(cookies, f)
    print(f"Cookies已导出到 {filename}")
# 导入Cookie
def import_cookies_selenium(driver, filename='cookies.json'):
    with open(filename, 'r') as f:
        cookies = json.load(f)
    for cookie in cookies:
        # 有些Cookie属性导入时可能需要调整
        if 'expiry' in cookie:
            cookie['expiry'] = int(cookie['expiry'])
        driver.add_cookie(cookie)
    print(f"从 {filename} 导入Cookies成功")
# 使用示例
driver = webdriver.Chrome()
driver.get('https://example.com')
# 导出
export_cookies_selenium(driver)
# 导入(需要先访问目标域名)
driver.get('https://example.com')
import_cookies_selenium(driver)
driver.refresh()  # 刷新页面以应用Cookie

命令行工具(Python)

#!/usr/bin/env python3
import argparse
import requests
import json
def main():
    parser = argparse.ArgumentParser(description='Cookie导入导出工具')
    parser.add_argument('action', choices=['export', 'import'], help='操作类型')
    parser.add_argument('--file', '-f', default='cookies.json', help='Cookie文件路径')
    parser.add_argument('--domain', '-d', help='Cookie域(导入时使用)')
    args = parser.parse_args()
    if args.action == 'export':
        # 这里需要根据实际情况从session获取Cookie
        # 示例只是展示结构
        session = requests.Session()
        cookies = session.cookies.get_dict()
        with open(args.file, 'w') as f:
            json.dump(cookies, f)
        print(f"Cookies已导出到 {args.file}")
    elif args.action == 'import':
        with open(args.file, 'r') as f:
            cookies = json.load(f)
        session = requests.Session()
        for name, value in cookies.items():
            session.cookies.set(name, value, domain=args.domain)
        print(f"从 {args.file} 导入Cookies成功")
if __name__ == '__main__':
    main()

使用建议

  1. 安全考虑

    • 不要在公共场合存储含有敏感信息的Cookie文件
    • 导出后加密存储
    • 及时删除不需要的Cookie文件
  2. 兼容性

    • 不同格式的Cookie数据可能不完全兼容
    • 某些Cookie可能有有效期限制
  3. 实际应用

    • 自动化测试中保持会话状态
    • 爬虫程序中避免重复登录
    • 多设备间同步登录状态

选择哪种方式取决于您的具体需求和使用场景。

抱歉,评论功能暂时关闭!