PC程序(Electron)开发如何注入Cookie

前情

有网友在开发一个桌面端刷单软件,需要保持网站的登录状态,省去每次输入账户密码。

业务逻辑

  1. 首先载入目标网站,并手动登陆。
    const {
            BrowserWindow } = require('electron');
    const win = new BrowserWindow({
            width: 800, height: 600 })
    win.loadURL('http://github.com')
    
  2. 然后根据不同的安全验证方式,使用Electron的通信功能,将登陆信息(CookielocalStoragesessionStorage等)储存到文件缓存。
    const fs = require('fs-extra');
    const {
            session } = win.webContents;
    session.cookies.get({
           }).then(cookies => {
           
    	fs.outputJson('cookies.json', cookies);
    });
    
  3. 每次打开时重新载入缓存的登陆信息。
    const {
            session } = win.webContents;
    const {
            cookies } = session;
    // 等待cookie初始化完成
    function waitCookieInit(){
           
    	return new Promise(function(resolve){
           
    		setTimeout(resolve, 3000);
    	});
    };
    // 替换cookie
    function cookieReplace(cookies,cookie){
           
    	return cookies.remove(cookie.url, cookie.name).then(() => {
           
    		return cookies.set(cookie);
    	})
    };
    //目标值
    const values = [
    	{
            
    		url: 'https://github.com', 
    		name: 'cookie1',
    		value: 'cookieValue',
    		domain: '.github.com', 
    		expirationDate: 99999999999
    	}
    ];
    //执行批量替换
    waitCookieInit().then(() => {
           
    	const promises = values.map(cookie => cookieReplace(cookies, cookie));
    	return Promise.all(promises).then(()=>{
           
    	// 设置成功
    	}).catch(()=>{
           
    	// 设置失败
    	})
    });
    
  4. 检查登陆状态是否有效,无效则删除缓存回到第一步。

补充

相对于该业务,session模块还有更多高级用法,可以参考官方网站。
传送门:https://www.electronjs.org/docs/api/session

有关多个窗口session隔离

const {
      BrowserWindow } = require('electron');
const win = new BrowserWindow({
      
	width: 800, 
	height: 600, 
	webPreferences: {
      
		partition: 'persist:name' // 将name改为业务session名称
	} 
})
win.loadURL('http://github.com')

你可能感兴趣的:(笔记,软件开发,cookie)