python 请在微信客户端打开_完美解决 请在微信客户端打开链接

完美解决 请在微信客户端打开链接

背景描述

相信有模拟微信页面请求的测试都有看到过这个页面,简单点说就是爬虫爬微信页面,进行回放的时候会出现这个页面。大概在1年前,专门安排了一个人去解决这个技术问题,遗憾的是当时没有找到解决方案,接下来所有微信端的接口测试和性能测试都无法进行,今天和大家分享下我们的解决方案,希望大家可以绕过微信的坑。

业务场景

我这里以JMeter来举例,我们可以通过在JMeter上开启代理,手机上设置代理来录制微信端的请求,以下为在微信端的业务对应生成的脚本:

录制完成后,我们进行回放,你会发现在查看结果树中,会重定向到微信授权,接着就开始提示:请在微信客户端打开链接。

这里补充几个录制的小技巧

1、每个组放入一个新的控制器:在手机端上做的一次操作所产生的请求会被放在一个控制器中,非常方便;

2、选中记录HTTP信息头、添加断言、Regex matching :自动添加信息头和断言;

问题分析

这里我们看一下请在微信客户端打开链接页面对应的代码:

var ua = navigator.userAgent.toLowerCase();

var isWeixin = ua.indexOf('micromessenger') != -1;

var isAndroid = ua.indexOf('android') != -1;

var isIos = (ua.indexOf('iphone') != -1) || (ua.indexOf('ipad') != -1);

if (!isWeixin) {

document.head.innerHTML = '

抱歉,出错了';

document.body.innerHTML = '

请在微信客户端打开链接
';

}

重点看:

var ua = navigator.userAgent.toLowerCase();

var isWeixin = ua.indexOf('micromessenger') != -1;

说明微信的这个提示是通过判断userAgent中是否包含micromessenger确认是否从微信中打开。

好了,我们查看以下HTTP头中的userAgent:

录制的时候自动添加了录制HTTP请求头的,那么为什么在JMeter打开会仍然会提示呢?这里怀疑是微信故意留的坑或者是微信开发这个页面的人英语四级没过。

解决方案

经过和我们程序猿哥哥陈丹明和陈建清一番讨论,一开始没有解决方案;此时丹明怀疑MicroMessenger这个单词写错了,应该是:micromessage!一试,果然!

好吧,程序猿你赢了,看来懂英语是多么的重要。

最终解决

在HTTP请求头里面将MicroMessenger修改成 micromessage。

小结

1、请在微信客户端打开链接 这个问题困扰了我们很久,今天总算解决,完美解决;

2、感谢程序猿的大胆怀疑,给他们点赞;

3、自动化测试过程中如果碰见了技术瓶颈,不妨多和研发沟通,他们总能给你一些指导。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以参考下面这个示例:import itchat itchat.login() #登陆微信 friends = itchat.search_friends(name='xxx') #搜索指定好友 userName = friends[0]['UserName'] #获取好友的UserName itchat.send('Hello, 我是Python程序发出的消息', toUserName=userName) #发送消息 ### 回答2: 使用Python编写微信客户端给指定好友发送消息的模板,可以使用itchat库实现。 首先,我们需要安装itchat库。可以使用pip命令在终端中执行以下命令安装: ```python pip install itchat ``` 安装完成后,我们可以在Python代码中引入itchat库: ```python import itchat ``` 然后,我们需要使用itchat库登录微信账号,可以调用login()函数进行登录: ```python itchat.login() ``` 在登录成功后,可以使用search_friends()函数来查找指定好友的信息。该函数需要传入好友的微信昵称,返回一个字典,包含了好友的详细信息。我们可以通过该字典获取到好友的微信id,然后使用send_msg()函数向好友发送消息: ```python friend = itchat.search_friends(nickname='好友昵称') friend_id = friend[0]['UserName'] itchat.send_msg('要发送的消息', friend_id) ``` 最后,我们需要调用itchat.run()函数来运行微信客户端。该函数会一直运行,直到我们主动退出程序。 完整的代码如下: ```python import itchat itchat.login() friend = itchat.search_friends(nickname='好友昵称') friend_id = friend[0]['UserName'] itchat.send_msg('要发送的消息', friend_id) itchat.run() ``` 运行以上代码,我们就可以实现使用Python编写微信客户端给指定好友发送消息的功能了。 需要注意的是,该模板只能在登录的设备上运行,不支持后台运行。 ### 回答3: 下面是一个使用Python编写的微信客户端模板,可以用来给指定好友发送消息。 ```python import itchat # 登录微信账号 itchat.auto_login() # 获取好友列表 friend_list = itchat.get_friends() # 找到指定好友的UserName target_friend_name = "指定好友的昵称" target_friend_username = None for friend in friend_list: if friend["NickName"] == target_friend_name: target_friend_username = friend["UserName"] break # 如果找不到指定好友,打印错误信息并退出 if target_friend_username is None: print("找不到指定好友") exit() # 发送消息 message = "你好,这是一条测试消息" itchat.send(message, toUserName=target_friend_username) # 登出微信账号 itchat.logout() ``` 注意,运行该脚本之前需要安装itchat模块。可以使用以下命令安装: ```shell pip install itchat ``` 其中,`指定好友的昵称`需要替换为你要发送消息的好友的昵称。你也可以根据其他信息进行筛选,比如备注名等。 该脚本登陆微信账号后,会先获取好友列表,然后通过遍历好友列表找到指定好友的UserName。如果找不到,则打印错误信息并退出。发送消息时,只需调用`itchat.send`函数,将消息内容和目标好友的UserName传入即可。 注意,该脚本只能在有图形界面的系统上运行,因为itchat模块需要扫描二维码进行登录。如果需要在无界面的服务器上运行,可以考虑使用itchat的可靠登陆方式,具体可以参考itchat的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值