关于Electron尝试记录视频号助手Cookies的尝试遇到的问题

126 阅读3分钟

需求分析

  1. 使用electron打开微信视频号助手

    session.fromPartition 注入唯一Tag 作为Cookies的标识

  2. 使用手机微信扫码登录
  3. electron的主进程使用保存cookies到文件系统/远程数据库

    sessionData.cookies.get({})获取Cookies,并存储

  4. 下次在electron中直接使用存储的Cookies访问登录后的页面

具体实现

打开网页

代码实现

这一步很简单 只需要这样 再这样 再这样 直接贴代码

....

const childWin = new BrowserWindow({  
  titleBarStyle: config.IsUseSysTitle ? "default" : "hidden",  
  height: taskConfig.window.height,  
  useContentSize: true,  
  width: taskConfig.window.width,  
  title: "视频号助手",  
  autoHideMenuBar: true,  
  minWidth: 842,  
  frame: config.IsUseSysTitle,  
  show: false,  
  webPreferences: {  
    session: sessionData,  
    sandbox: false,  
    webSecurity: true, // 禁用同源策略  
    // 如果是开发模式可以使用devTools  
    devTools: process.env.NODE_ENV === "development",  
    // 在macos中启用橡皮动画  
    scrollBounce: process.platform === "darwin",  
    preload: getPreloadFile("wechat_video_authorization"),  
    additionalArguments: ['--job-data', JSON.stringify(data)],  
  },  
});

...

// 开发模式下自动开启devtools  
if (process.env.NODE_ENV === "development") {  
  childWin.webContents.openDevTools({mode: "undocked", activate: true});  
}  
let wechatVideoCreativeUrl = taskConfig.url.creatorWechatVideoCom  
childWin.loadURL(wechatVideoCreativeUrl)

Npm run dev

一切都是这么的自然,打码写完 只需要扫码登录 就好了,然而......

image.png

腾讯:惊不惊喜,意不意外? 二维码不给你扫

尝试修改electron相关配置参数

无果

开始发动人脉

  • QQ群:虽然没有解决问题,但是大佬们在积极讨论技术的心态影响了我,让我能继续有勇气解决这个问题 image.png

  • 百度:食之无味,弃之可惜

    呼呼 找到一个同样问题的人 然后进入"微信开放社区"

  • 微信开放社区:虽然没有解决问题,但是遇到了一样遇到问题的人

    帖子 但是没有提到解决方法

开始直接分析请求

ChromeElectron
image.png
image.png
Accept: application/json, text/plain, /
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8
Connection: keep-alive
Content-Length: 715
Content-Type: application/json
Cookie: RK=Vfvprlt7bM; ptcz=f7f74cce907d40074eadbbe26673a34843042062f2bf3bfb868e83ec4ebf1bb4; pgv_pvid=4648184842; wxuin=1868819822; eas_sid=D1j7E488Q3U1a6y5S6R6L7f4n8; sessionid=
DNT: 1
Host: channels.weixin.qq.com
Origin: channels.weixin.qq.com
Referer: channels.weixin.qq.com/platform/lo…
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="136", "Google Chrome";v="136", "Not.A/Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
accept:application/json, text/plain, /
accept-encoding:gzip, deflate, br, zstd
accept-language:zh-CN
connection:keep-alive
content-length:152
content-type:application/json
cookie:wxuin=14058216
host:channels.weixin.qq.com
origin:channels.weixin.qq.com
referer:channels.weixin.qq.com/platform/lo…
sec-ch-ua:"Not A(Brand";v="8", "Chromium";v="132"
sec-ch-ua-mobile:?0
sec-ch-ua-platform:"Windows"
sec-fetch-dest:empty
sec-fetch-mode:cors
sec-fetch-site:same-origin
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.6834.210 Electron/34.5.4 Safari/537.36

开始头脑风暴........ 真実はいつもひとつ 抛开那些无关紧要的信息 相信大家也都猜到了 让我们把目光移到"User-Agent"上,没错,就是这里 让我们尝试一下

let user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36";
childWin.loadURL(wechatVideoCreativeUrl, {userAgent: user_agent})

image.png

这不就成了么.....

后续步骤

因为后续没遇到什么问题,就很顺利的完成了整个逻辑

总结

因为也做过其他平台(抖音/小红书等)的这类存储cookies后留待下次使用的需求,微信视频号这个限制"User-Agent"不给显示二维码的骚操作真的是第一次看到,一下子给我整懵了,一开始我甚至怀疑是iframe的问题,设置了electron的webSecurity的策略,都是不行,索性最后还是解决了