和微信ooxx的数百回合

一、什么是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指令

我们校验是否安装成功,任意位置执行:

phantomjs -v复制代码

结果如下,安装成功:


六、实现原理流程

七、基于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.执行命令:

phantomjs demo.js复制代码

4.打开生成的logincode.png:

手机扫码登陆

5.查看检测结果:


八、问题和改进

我们每次执行并没有保存登录状态,我们检测一个地址之后就会执行退出,

现有的测试demo对于测试的域名我们要修改测试域名,反复登录,扫码,获取结果。


转载于:https://juejin.im/post/5cf0b769f265da1bbe5dea45

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值