需求分析
- 使用
electron打开微信视频号助手session.fromPartition注入唯一Tag 作为Cookies的标识 - 使用手机微信扫码登录
electron的主进程使用保存cookies到文件系统/远程数据库sessionData.cookies.get({})获取Cookies,并存储- 下次在
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
一切都是这么的自然,打码写完 只需要扫码登录 就好了,然而......
腾讯:惊不惊喜,意不意外? 二维码不给你扫
尝试修改electron相关配置参数
无果
开始发动人脉
-
QQ群:虽然没有解决问题,但是大佬们在积极讨论技术的心态影响了我,让我能继续有勇气解决这个问题
-
百度:食之无味,弃之可惜
呼呼 找到一个同样问题的人 然后进入"微信开放社区"
-
微信开放社区:虽然没有解决问题,但是遇到了一样遇到问题的人
帖子 但是没有提到解决方法
开始直接分析请求
| Chrome | Electron |
|---|---|
| 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})
这不就成了么.....
后续步骤
因为后续没遇到什么问题,就很顺利的完成了整个逻辑
总结
因为也做过其他平台(抖音/小红书等)的这类存储cookies后留待下次使用的需求,微信视频号这个限制"User-Agent"不给显示二维码的骚操作真的是第一次看到,一下子给我整懵了,一开始我甚至怀疑是iframe的问题,设置了electron的webSecurity的策略,都是不行,索性最后还是解决了