肥宅钓鱼网
当前位置: 首页 钓鱼百科

前端微信授权登录如何弄(纯前端JS解决微信公众号自动登录问题)

时间:2023-08-12 作者: 小编 阅读量: 1 栏目名: 钓鱼百科

公众号首页核心功能就两块,webview的preload插入js文件,js文件里面动态嵌入不同的账密。通过第一行的define,第一时间想到的是seajs,后来发现就是seajs,无他。现在要考虑的是,如何给webview组件带入不同的账密。这里使用Sync原因很简单,异步处理相对麻烦,调试用同步,高效快速。于是我们pass第一种方案,如果你成功了,务必告诉我下。

注意,本文实现功能不涉及任何后端,有后端搭伙的小伙伴可以不用看了哈。

微信

场景

这两天解决公众号广告分发平台项目(基于Electron)的一些棘手问题,其中之一就是微信公众号自动登录问题。

一个PC客户端,内嵌了一个webview,里面塞入的是微信公众号首页,即登录页:https://mp.weixin.qq.com/,拿Cookie,Token什么的不在本文内,较为敏感,这里只说一下实现自动登录功能。

公众号首页

核心功能就两块,webview的preload插入js文件,js文件里面动态嵌入不同的账密。


preload

Electron的webview允许开发者设计预插入一个js文件,具体官网描述如下:

preload

preload

<webview src="http://img.studyofnet.comhttps://www.github.com/" preload="./test.js"></webview>

指定一个脚本在访客页中其他脚本执行之前先加载。 该脚本的URL的协议必须是 file: asar:二者之一,因为在访客页中,它是通过“内部”的 require 去加载的

当访客页没有 node integration ,这个脚本仍然有能力去访问所有的 Node APIs, 但是当这个脚本执行执行完成之后,通过Node 注入的全局对象(global objects)将会被删除。

注意: 在为 will-attach-webview 事件指定 webPreferences 时,这个选项将作为 preloadURL 出现,而不是 preload。

所以,相对来说简单的想法就是在preload的js里面,我们做一下输入框内容的填充即可。

道理是这么个道理,但是实际操作起来会有一些问题,我们代码一步一步来,首先想到的是,input.value = x这种操作。

下面是账号input相关信息:

account

下面是密码input相关信息:

pwd

那么就可以通过querySelector方式获取两个输入框了:

// inputs.length === 2,刚好两个,不用担心其他的干扰了。let inputs = document.querySelectorAll('.weui-desktop-form__input')

再观察登录按钮下:

login

嘛,我个人是不喜欢使用a标签当提交按钮……

获取方式:

let a = document.querySelector('.btn_login')

很简单吧。

于是就有如下提交代码:

let inputs = document.querySelectorAll('.weui-desktop-form__input')// 随手放到数组里,不要较真,账密自己填写自己的let infos = ['account', 'password']for(let i = 0; i < inputs.length; i) { let input = inputs[i] input.value = infos[i] setTimeout(() => { let a = document.querySelector('.btn_login') a.click() }, 0)}

按说,逻辑没问题。但是,实际使用公众号平台会返回告诉你,没有输入账号(密码)。

只能抠下源码分析怎么回事了,源码所在位置(随机数你看到的与我未必一样):

源码

右侧复制下来,然后本地编辑器新建js,并且格式化后就可以看到比较清晰的源码,虽然命名被压缩后比较奇葩,如下:

源码格式化后

检索相关关键词(比如“你还没有输入帐号!”),或者login(查多了就知道了),就可以找到相关的逻辑所在。

通过第一行的define,第一时间想到的是seajs,后来发现就是seajs,无他。

再看到里面的,computed,watch,mounted之类的,也可以联想到是Vue,所以应当是seajs与Vue混合开发的公众号首页。

到这里,就相对清晰了,获取不到账密原因在于我们直接设置value的方式,并不能触发Vue实例的data修改,如下:

核心data值

此时,就该想到Vue的事件机制(不需要懂源码,用过就差不多),简单来说,就是事件函数驱动data变化,而不是外部手动修改DOM可以触发。

所以,增加一句话就可以混淆Vue的data机制,从而解决data值不响应变化的问题:

input.dispatchEvent(new Event('input'))

没错,神奇的Event函数,通过new对象的方式,让相应标签实例主动触发相关事件。

这里注意下,不是所有都是input事件,这个根据标签不同而不同,我们这里要解决的是微信公众号登录的问题,所以是输入框input标签,那么自然就是input事件(oninput)了。

完整处理代码如下,请注意与上方的对比:

let inputs = document.querySelectorAll('.weui-desktop-form__input')// 随手放到数组里,不要较真,账密自己填写自己的let infos = ['account', 'password']for(let i = 0; i < inputs.length; i) { let input = inputs[i] input.value = infos[i] // 修改input的值后,记得主动触发一次input事件。 input.dispatchEvent(new Event('input')) setTimeout(() => { let a = document.querySelector('.btn_login') a.click() }, 0)}

这样,a的click事件就生效了,至此,完成登录这个事情。


动态账密

上面解决了模拟登录问题,但是仅仅是模拟,因为账密是写死的,别忘了,我们现在在Electron的一个webview组件里面。

现在要考虑的是,如何给webview组件带入不同的账密。

  1. fs写入新的js,里面插入账密,再读取
  2. 通过其他webview文件信息插入

先说第一种,这个是有点node基础的小伙伴都会首先想到的,没错,我尝试了,然后,挂了。

原因很简单,沙盒内的文件路径与你启动前配置的文件路径不同,导致代码上写的读取路径(readFileSync)与写入路径(writeFileSync)不同,能写不能读,WTF……这里使用Sync原因很简单,异步处理相对麻烦,调试用同步,高效快速。

于是我们pass第一种方案,如果你成功了,务必告诉我下。

然后是第二种:

这里先说明下,个人觉得第二种有点侥幸,因为公众号后端验证没有严格到把ua(userAgent)也算进去,所以我找到这个方案。

首先查询了webview能够带入进去的所有属性,很幸运,有个ua,官网介绍如下:

官网ua

useragent

<webview src="http://img.studyofnet.comhttps://www.github.com/" useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko"></webview>

在访客页被导航(navigated)之前,为它设置 user agent,一旦这个页面加载之后,使用 setUserAgent 方法去改变这个页面的 user agent。

事实上,还有别的(主要受webview限制,即Electron限制),但是懒得找了,差不多意思就行。

可能已经有小伙伴想到方案了,所以我就不墨迹了,直接上代码处理,先是写入:

// 你也可以写成标签<webview useragent="['account', 'password']"></webview>,这里为了灵活而已webview.setAttribute('useragent', "['account', 'password']")

然后读取并赋值:

let infos = JSON.parse(navigator.userAgent)

由于ua我们写成了字符串的数组,所以这里自然可以解开成数组实例。

那么后面就简单了,不再赘述,直接看完整的核心代码即可,注意对比差异:

let inputs = document.querySelectorAll('.weui-desktop-form__input')// 从ua获取传入的值let infos = JSON.parse(navigator.userAgent)for(let i = 0; i < inputs.length; i) { let input = inputs[i] input.value = infos[i] // 修改input的值后,记得主动触发一次input事件。 input.dispatchEvent(new Event('input')) setTimeout(() => { let a = document.querySelector('.btn_login') a.click() }, 0)}

至此,我们就解决了纯前端模拟微信页面登录,并动态不同账号登录的问题了。

效果如下:

autologin


感谢大家的阅读,欢迎交流。

    推荐阅读
  • 河北廊坊市万寿园公墓代客祭扫流程 河北省万寿园扫墓需要预约吗

    D、代客全天进行,不分上下午。祭扫日期及顺序按所订墓位自动排序。

  • 韩先楚将军战将电视剧叫什么名(是什么类型的电视剧)

    以下内容大家不妨参考一二希望能帮到您!韩先楚将军战将电视剧叫什么名电视剧《战将》的韩先楚是韩先楚将军。《战将》是一部革命历史题材类电视剧。该剧讲述了韩先楚从1926年参加革命开始,先后在土地革命、长征、抗日战争、解放战争及抗美援朝中浴血奋战的英雄故事。《战将》是由中央电视台、中国电视剧制作中心有限责任公司联合出品,宁海强执导,徐洪浩、宁宁、刘鹏、沙杰、曹凯等领衔主演的革命历史题材类电视剧。

  • 谭维维名字打分104分 谭维维名次

    文章目录:一、谭维维相关名字打分109二、谭维维相关名字评分118三、谭维维相关名字推荐四、谭维维相关名字大全五、其他人还看了一、谭维维相关名字打分109谭林长谭正芳谭玉成谭丽娟谭松涛谭慧敏谭迎春谭良良谭艾珍谭港麟谭恒才谭覃谭魔王谭观银谭杏蓝谭木谭舒谭东谭琳玲谭松珩谭有超谭小地谭仲池谭海洋谭晓松谭炯谭嘉惠谭淑梅谭泽闿谭志波谭文娟谭昊谭瀑峡谭家林谭贵妃谭芷谭义谭红专谭仕奇谭新建谭科琦谭竹青谭松筠谭辉

  • 路边停车etc扣费合理吗(你被停车费吓到了吗)

    对此,管理宛南四村的高建物业表示,考虑到临停车辆被封控在小区的特殊情况,公司已对滞留车辆的收费标准进行了调整。据物业介绍,封控期间滞留在宛南四村内的临停车辆约有十几辆,近期,物业也将通过业主群及居委及时告知车主,做好车费减免对接工作。但是,上海的本轮疫情来势汹汹,对因临时封控措施滞留在亲友处的人来说,车辆长时间的临时停车并不是他们的本意,也是他们事先没有预见的。

  • 最有效的健康减肥方法(正确的有效减肥方法)

    但是单做带氧运动是不够的,原因是其并不足以令肌肉生长,而肌肉是可以燃烧脂肪的。所以除了带氧运动之外,必需配合肌力训练,才可以早日减肥成功。天然的调味品,如香草、胡椒等就是很好的酱汁代替品,可以为美食添加味道之余,亦不会妨碍减肥成功。最解渴又不会肥的,始终是水。

  • 以家人之名最后子秋和谁在一起了(贺子秋角色介绍)

    以家人之名最后子秋和谁在一起了《以家人之名》贺子秋最后跟齐明月在一起了。贺子秋演员张新成经营着一家咖啡店,甜品师。《以家人之名》是由丁梓光执导,谭松韵、宋威龙领衔主演,张新成特别出演,涂松岩、孙铱、何瑞贤、安戈等主演,张晞临、杨童舒友情出演的青春成长治愈剧,剧讲述了3个原生家庭有缺失的孩子组成了一个非血缘关系的家庭,兄妹三人在成长中彼此扶持,逐渐治愈了内心的伤,与过去的自己和解,成为了更好的人。

  • 冰糯种的翡翠好不好(冰糯种的翡翠怎么样)

    下面内容希望能帮助到你,我们来一起看看吧!冰糯种的翡翠好不好冰糯种一般是指透明度好、水头好的糯化种可达到冰种水平的一种翡翠品种,为了区别普通的糯化种,这样的也叫冰种化底。翡翠的糯种,种是指翡翠材料的质地,翡翠质地细密即种较老或老;晶体之粗松,就叫嫩。因为翡翠是多晶体的结合体,因此种被形象地分成玻璃种、冰种、蛋清种、糯种、豆种等、油青种。玻璃种最好,豆种以下很差就不可取,细糯种以上就不错。

  • 红土是什么土(红土所属的土简介)

    以下内容希望对你有帮助!红土是什么土红土地是酸性土壤。它主要分布在我国长江以南的丘陵地区,由于高温多雨,土壤中含铁、铝较多,所以橙红色。它的有机质很少,土质也比较粘重,不太适合作物的耕种。可以通过加入有机肥和熟石灰进行改良,这样就能种植一些喜酸性土壤的植物了。

  • 大耳狐的耳朵有什么作用(大耳狐的耳朵有何作用)

    大耳狐的耳朵有什么作用大耳狐的大耳朵非常灵敏,能捕捉到昆虫、蜥蜴、野兔发出的轻微的声音,能监测危险,也可起到散热的作用。大耳狐有蝙蝠翅膀一样的耳朵,最长可达14厘米,其皮毛色彩淡黄至深蜜色不等,具体颜色取决于年龄和发现区域。大耳狐栖息于干旱草原和热带稀树草原,偏好短草区域。一般独自觅食,在昆虫丰富的地方,大耳狐也会大量聚集。

  • 屈原的诗(屈原的主要作品)

    屈原的诗屈原的主要作品有《离骚》《九歌》《九章》《天问》等。以屈原作品为主体的《楚辞》是中国浪漫主义文学的源头之一,以最著名的篇章《离骚》为代表的《楚辞》与《诗经》中的《国风》并称为“风骚”,对后世诗歌产生了深远影响。成为中国文学史上的璀璨明珠,“逸响伟辞,卓绝一世”。“路漫漫其修远兮,吾将上下而求索”,屈原的“求索”精神,成为后世仁人志士所信奉和追求的一种高尚精神。