Skip to content

zhifengle/gcookie

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gcookie

A tool for getting site cookie from your browser.

Note

Chrome above 110 would lock Cookies file when browser is running in Windows. If you encounter an error, please try running gcookie with administrator privileges or close the browser.

About

When you write a script for scraping some data, you may need the cookie of the site. Instead of copying cookie string from Browser, you can use the std output of this tool.

const { execSync } = require('child_process');
let site = 'bing.com';
const cookie = execSync(`gcookie ${site}`).toString();
from subprocess import check_output
site = 'https://cn.bing.com'
# output of cookies in `cn.bing.com`. not `bing.com`
cookie = check_output(['gcookie', '-c', 'Edge', site]).decode("utf-8")
# example in Scrapy
def get_cookies_dict(cookies):
    if not cookies:
        return {}
    return {c.split('=')[0]: c.split('=')[1] for c in cookies.split('; ')}

class DemoSpider(scrapy.Spider):
    name = 'demo'

    def start_requests(self):
        cookies_dict = get_cookies_dict("your_cookies")
        yield scrapy.Request(
            url,
            headers={'Content-Type': 'application/json'},
            cookies=cookies_dict,
            callback=self.parse,
        )

Supported Browser

Windows

Firefox, Chrome, Edge, Chromium

Linux

Firefox

Install

download the release for your system and run the binary

Usage

Usage: gcookie [OPTIONS] <site>

gcookie -h print help infomation.

Examples

# App would use Chrome's cookie
> gcookie "google.com"
1P_JAR=2022-07-20-12; APISID=xxxyyyyy

# App would use Edge's cookie
> gcookie -c Edge "bing.com"

# App would use Firefox's cookie
> gcookie -f /path/to/profiles/xx.p "bing.com"

# App would use Chrome's cookie in this path
> gcookie -p "/path/to/User Data/Default" "bing.com"

Lib Usage

Add this to your Cargo.toml

[dependencies]
gcookie = "0.1.1"

Note

Version 0.1.0 introduces a breaking change: the API has changed. It now uses the library "rookie" as the backend to read cookies. The original internal cookie reading function is deprecated.

get cookie by Chrome

let site = "http://google.com";
let cookie = gcookie::get_cookies("chrome", site);

let site = "bing.com";
let browser = "Edge";
let cookie = gcookie::get_cookies(browser, site);
assert!(cookie.is_ok());

let site = "https://google.com";
let mut path = PathBuf::new();
path.push(r"C:\my_chrome\user data\default");
let cookie =  match gcookie::get_chrome_cookies_by_path(site, &path) {
    Ok(cookie) => cookie,
    Err(err) => panic!("An error occurred when get cookie '{}': {}", site, err),
};

get cookie by Firefox with path

let site = "https://www.mozilla.org/";

let mut path = PathBuf::new();
path.push(r"C:\my_firefox\profile");

let cookie =  match gcookie::get_firefox_cookies_by_path(site, &path) {
    Ok(cookie) => cookie,
    Err(err) => panic!("An error occurred when get cookie '{}': {}", site, err),
};

Development

git clone https://github.com/zhifengle/gcookie

# Build
cd gcookie
cargo build

# Run unit tests and integration tests
cargo test

# Install
cargo install --path .