影响因素主要会有以下几点:
1、网络环境不佳;
2、手机或模拟器中微信客户端崩溃;
3、其它一些网络传输错误;
因为我比较看重采集系统的运行成本,这个成本包括硬件投入,运算力投入和占用的人工精力。所以必须提高运行的稳定性。因此如果采集中断,必然增加人工精力的成本。所以针对这一点我对anyproxy做了一些进阶的改造,并且借助了其它一些工具提高了运行效率。以下就是具体的解决方法:
一、代码升级
1)微信浏览器白屏
解决方法:修改文件requestHandler.js,还是在rule_default.js同级目录下,(mac系统/usr/local/lib/node_modules/anyproxy/lib/;win系统评论区网友cnbattle提供C:/Users/Administrator/AppData/Roaming/npm/node_modules/anyproxy/lib)
在代码中找到proxyReq.on("error",function(e){这个函数,并修改内容
//userRes.end();//把这一行注释掉userRes.end('<script>setTimeout(function(){window.location.reload();},2000);</script>');//插入这一行
这样当发生错误时,会返回一个刷新当前页面的js;这样程序就能继续下去了
2)替换所有图片,减轻浏览器负担
首先需要制作一张非常小的图片,我做的是1x1像素,png透明图;放到任意文件夹里。然后修改文件rule_default.js的代码:
在文件开头有许多var的位置加入以下代码
var fs = require("fs"), img = fs.readFileSync("/Library/WebServer/Documents/space.png");//代码绝对路径替换成自己的
在下面的代码中找到shouldUseLocalResponse : function(req,reqBody){函数,在函数内插入代码:
if(/mmbiz/.qpic/.cn/i.test(req.url)){ req.replaceLocalFile = true; return true;}else{ return false;}
继续在下面的代码中找到dealLocalResponse : function(req,reqBody,callback){函数,在函数内插入代码:
if(req.replaceLocalFile){ callback(200, {"content-type":"image/png"},img );}
这三段代码就会将公众号里面的所有图片替换成本地图片,减轻网络传输压力和浏览器占用的内存,有效的提高运行效率;
3)禁止手机或模拟器访问一些无用的和会导致错误的网址
同样在rule_default.js里找到代码replaceRequestOption : function(req,option){函数,在函数内部插入代码:
var newOption = option;if(/google|btrace/i.test(newOption.headers.host)){//这里面的正则可以替换成自己不希望访问的网址特征字符串,这里面的btrace是一个腾讯视频的域名,经过实践发现特别容易导致浏览器崩溃,所以加在里面了,继续添加可以使用|分割。 newOption.hostname = "127.0.0.1";//这个ip也可以替换成其他的 newOption.port = "80";}return newOption;
新闻热点
疑难解答