一、什么是wx屏蔽
简单理解就是我们想让用户看到的页面没有正常展示给用户。
提供使用的测试地址,我们在微信打开,效果依次如下:
测试地址1:被屏蔽,提示多次// 9.imilive.cn/share.html
测试地址2:正常// developers.weixin.qq.com/miniprogram…
测试地址3:被屏蔽,禁止访问// www.zidanduanxin.com/
二、最简单的检验方式
我们把要检测地址,作为消息发送,我们手动点击域名地址,进入就会看到上述效果。
三、web-wx让我们有机可乘
我们最开始想到的技术方式就是脚本处理,root一台安卓手机,我们安卓手机登录一个wx,采用技术手段获取数据库存放的要校验域名,作为消息发给自己,脚本点击进入,脚本识别结果,更新数据库对应域名状态。
基于这个推理,我们就想到了另一个方式,就是微信机械人(nodejs,python,go,java,php)的三方实现,这样在服务端我们就纯实现。
我们随后做了机械人库的探索实现,发现在登录环节是基于web-wx的登录,登陆后实现后续自定义操作。机械人测试中我们首先实现的接收和发送消息,然后识别是域名消息,开始检测的处理。
web-wx登陆后会在浏览器把登录信息以cookie形式存放,域名消息的校验也是必须在这个登录前提处理,不然不能正确执行。
到这一步,为了更简单的实现,就想到了无界面浏览器的实现,在无界面浏览器进行web微信登录,无界面浏览器会自动保存cookie,然后进行后续处理。
四、无界面浏览器
找到了一款多平台多语言的无界面浏览器。
phantomjs(官网phantomjs.org/)(下载phantomjs.org/download.ht…)
我们可以看到,大家使用无界面浏览器基本会做下面功能的开发:
1.截图
2.爬虫
3.自动化测试
五、安装phantomjs(windows下安装)
我们下载对应的平台包,
在window下,我们环境变量配置,保证全局支持phantomjs指令
我们校验是否安装成功,任意位置执行:
结果如下,安装成功:
六、实现原理流程
七、基于js的代码实现
1..demo.js代码书写:
var webpage = require('webpage');
var system = require('system');
var args = system.args;
var page = webpage.create();
// 是否登陆
var is_logon = false;
// 打开网址
page.open('https://wx.qq.com/', function (status){
// 加载ok
if (status != "success"){
console.log('FAIL to load the address');
phantom.exit();
};
// 延时
window.setTimeout(function (){
// 在本地生成截图
page.render("logincode.png");
console.log('生成二维码');
// 校验登录
check_login()
// phantom.exit();
}, 1000);
// dom处理
page.evaluate(function(){
});
});
// 地址变化
page.onUrlChanged = function(targetUrl) {
//console.log('New URL: ' + targetUrl);
};
// 校验登录
function check_login(){
var cookies = page.cookies || {};
//console.log('已经成功登录',cookies);
var islogin = false;
var wxsid = '';
for(var i in cookies) {
//console.log(cookies[i].name + '=' + cookies[i].value);
if(cookies[i].name == 'wxsid' && !!cookies[i].value){
wxsid = cookies[i].value;
islogin = true;
break;
};
};
if(islogin){
console.log('已经登录',wxsid);
is_logon = islogin;
//phantom.exit();
// 检验页面
// https://9.imilive.cn/share.html
// https://developers.weixin.qq.com/miniprogram/dev/
// https://www.zidanduanxin.com/
check_url('https://developers.weixin.qq.com/miniprogram/dev/');
return false;
};
setTimeout(function (){
// 校验登录
check_login();
}, 1000);
};
// 检验页面
function check_url(url){
var h_url = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxcheckurl?requrl='+url;
page.open(h_url, function (status){
// 加载ok
if (status != "success"){
console.log('FAIL to load the address');
phantom.exit();
};
console.log('==========校验'+url+'结果==========');
var content = page.content || '';
//console.log(content);
// page.content
var reg = /DATA.{1,}/g;
var r = content.match(reg) || [];
if(r.length > 0){
console.log(r[0].substr(5));
}else{
console.log('该网站地址在微信内正常访问');
};
phantom.exit();
});
};复制代码
|
3.执行命令:
4.打开生成的logincode.png:
手机扫码登陆
5.查看检测结果:
八、问题和改进
我们每次执行并没有保存登录状态,我们检测一个地址之后就会执行退出,
现有的测试demo对于测试的域名我们要修改测试域名,反复登录,扫码,获取结果。