Author Archives: duanzhihe

About duanzhihe

热爱思考,热爱生活,喜欢用文字记录心情,描绘所想

sublime text 3 打开的文件中快速定位到目录结构

题目描述的不太清楚,大意就是,我利用搜索之类的打开了一个文件,但我不知道这个文件所在的层级目录,这个时候怎么办?

有一个插件可以满足要求,叫SyncedSideBar,安装完这个插件后,在打开的文件窗口右键会出现一个“Reveal in Side Bar”,选择“Reveal in Side Bar”后右键的目录结构就出来了。

不会安装sublime的插件,可以看下面这篇文章:http://www.duanzhihe.com/?p=817

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

Git 中.gitignore 使用和.gitignore 无效的解决方法

原文地址:https://www.jianshu.com/p/e5360fa04152

造成这个问题的原因是:.gitignore只能忽略那些原来没有被 track 的文件,如果某些文件已经被纳入了版本管理中,则修改 .gitignore 是无效的。
解决方法是先把本地缓存删除,然后再提交。

解决问题的具体命令。

git rm -r --cached .
git add .
git commit -m 'We really don't want Git to track this anymore!'

如果缓存中有重要的数据更改,那么你需要单独删除不要的缓存:

git rm --cached logs/xx.log

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

VUE页面切换加过渡效果

vue版本2.5.2;
vue-router版本:3.0.1

然后直接上代码:

<template>
    <div id="app">
        <transition :name="transitionName">
            <router-view class="child-view"/>
        </transition>
    </div>
</template>

<script>
export default {
    name: 'App',
    data () {
        return {
            transitionName : '',
            routerList : ['']
        }
    },
    watch: {
        '$route' (to, from) {
            //判断左右展示动画
            const _self = this;
            const toPath = to.path.substr(1);
            if(_self.routerList.indexOf(toPath) == -1){
                _self.routerList.push(toPath);
                _self.transitionName = 'slide-left';
            }else{
                _self.transitionName = 'slide-right';
                if(_self.routerList.length != 1){
                    _self.routerList.pop();
                }
            }
        }
    }
}
</script>

<style>
.child-view {
    position: absolute;
    width:100%;
    transition: all .8s cubic-bezier(.55,0,.1,1);
}
.slide-left-enter, .slide-right-leave-active {
    opacity: 0;
    -webkit-transform: translate(100px, 0);
    transform: translate(100px, 0);
}
.slide-left-leave-active, .slide-right-enter {
    opacity: 0;
    -webkit-transform: translate(-100px, 0);
    transform: translate(-100px, 0);
}
</style>

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

js动态加载并在加载后执行一些代码

这个借助一些框架或工具应该有很多方式,比如利用seaJs,requireJs,还有jquery的getScript方法,这里只说一下用原生的方式怎么处理,最简单原始的解决方式,废话不多说了,直接上源码吧:

var script = document.createElement("script");
script.onload = script.onreadystatechange = function(){
  if(!this.readyState || this.readyState=='loaded' || this.readyState=='complete'){
		location.replace(window.pushUrl);
     script.onload = script.onreadystatechange = null;
  }
};
script.src = 'http://xxxxxx/xxx.js?v='+new Date().getTime();
document.body.appendChild(script);

备注:亲测了PC端chrome,还有移动端的几个机型(包含IOS和安卓)没有啥问题

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

js预加载资源,并展示加载进度

之前经常看到有人做的页面加载前先有一个加载过程,并且动态展示加载的百分比,查了一下,发现利用了一个CreateJS,CreateJS中的PreloadJS可以实现效果。

先附上CreateJS的官网:

官网:https://createjs.com/

中文官网:http://createjs.cc/

下面附上一个简单源码,备注:由于引用的资源都是本地的,所以想要跑case,需要替换成自己的本地资源哦,比如creatsjs,还有那些预加载的图片。

<html>
<head>
	<title>createJs</title>
	<meta charset="utf-8" />
	<meta HTTP-EQUIV="pragma" CONTENT="no-cache">
	<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
	<meta HTTP-EQUIV="expires" CONTENT="0">
	<meta name="keywords" content="" />
	<meta name="description" content="" />
	<meta name="apple-touch-fullscreen" content="yes" />
	<meta name="format-detection" content="telephone=no" />
	<meta name="apple-mobile-web-app-capable" content="yes" />
	<meta name="apple-mobile-web-app-status-bar-style" content="black" />
	<meta http-equiv="Expires" content="-1" />
	<meta http-equiv="pragram" content="no-cache" />

	<script type="text/javascript" src="creatsjs.js"></script>
	<style type="text/css">
		.done{
			display: none;
		}
	</style>
</head>
<body>
	<p class="process">加载进度<span></span></p>
	<p class="done">加载完成</p>
<script type="text/javascript">
	var manifest = [
		{src:"./bigData/0001.jpg",id:"img0001"},
		{src:"./bigData/0002.jpg",id:"img0002"},
		{src:"./bigData/0003.jpg",id:"img0003"},
		{src:"./bigData/0004.jpg",id:"img0004"},
		{src:"./bigData/0005.jpg",id:"img0005"},
		{src:"./bigData/0006.jpg",id:"img0006"},
		{src:"./bigData/0007.jpg",id:"img0007"},
		{src:"./bigData/0008.jpg",id:"img0008"},
		{src:"./bigData/0009.jpg",id:"img0009"},
		{src:"./bigData/0010.jpg",id:"img0002"},
		{src:"./bigData/0011.jpg",id:"img0011"},
		{src:"./bigData/0012.jpg",id:"img0012"},
		{src:"./bigData/0013.jpg",id:"img0013"},
		{src:"./bigData/0014.jpg",id:"img0014"},
		{src:"./bigData/0015.jpg",id:"img0015"},
		{src:"./bigData/0016.jpg",id:"img0016"},
	]
	var loader = new createjs.LoadQueue(true);
	loader.on("progress", handleFileLoad);
	loader.on("complete", handleComplete);
	loader.loadManifest(manifest);
	function handleFileLoad(e){
		var bnum=parseInt(loader.progress*100);
		document.querySelector('.process span').innerText = bnum+'%';
	}
	function handleComplete(){
		alert('done');
	}
</script>
</body>
</html>

最后再说一下,creatsjs功能挺强大的,有时间和兴趣的可以深入研究!!

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

Unable to load script from assets index.android.bundle on windows

react-native在运行demo时报如下错误“Unable to load script from assets index.android.bundle on windows”。

react-native版本是0.55.0
安卓调试真机是oppo R9s
android studio的版本是3.1

介绍完前提,开始说解决办法。

首先,到你的react-native目录下,然后找到android/app/src/main目录,在这个目录下新建一个assets,可以手动建,也可以mkdir建,如:

mkdir assets

然后执行下面的命令:

react-native bundle –platform android –dev false –entry-file index.js –bundle-output android/app/src/main/assets/index.android.bundle –assets-dest android/app/src/main/res

参考文章:https://stackoverflow.com/questions/44446523/unable-to-load-script-from-assets-index-android-bundle-on-windows

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

mac下关闭、重启利用brew安装的nginx

如题,本人的nginx是利用brew直接安装的,安装完后启动直接是用sudo nginx执行,启动是启动了,但若是修改了配置文件后想要重启操作不知道怎么做了~~~~

最初,不知道怎么解决,项目紧张也没有太多时间查就采用了最暴利的方法,利用”ps -ef | grep nginx”查询到nginx的进程id,然后kill掉,然后再重启~~~

很明显,这不是一个合理的解决办法,于是今天有时间的情况下,我就查了一下怎么做,最简单,利用nginx -h看了看,返回如下。

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/Cellar/nginx/1.12.2_1/)
  -c filename   : set configuration file (default: /usr/local/etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

看到了其中的-s命令了,可以出发一个主进程的信号,信号可以是stop, quit, reopen, reload,很明显,stop(关闭)和reload(重启)命令都在里面,至此问题解决了。

什么还是没看懂怎么做?

很简单,关闭就是这个“nginx -s stop”,其他的不用说了吧!

PS:这里有可能只适用于用brew安装的nginx,至于系统,mac可能还好,其他类unix不一定适用,它们有可能有更加便利的方案。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

badJs的mysql账号名和密码的更改

文章发布时间20180403!

搭建badJs环境时mysql默认是没有密码的,但自己的mysql数据库访问又是需要密码的,这个时候就需要修改了,全局搜索有关“localhost:3306”的内容(为啥搜索这个,因为一般来说默认的mysql端口时3306,本地访问是localhost),一共找到了如下三个文件,路径时自己的badjs下:

./badjs-installer/badjs-web/project.debug.json
./badjs-installer/badjs-web/project.json
./badjs-installer/badjs-web/test/test-email-add.js

从字面来看,基本上可以猜出三个文件的作用,不过也不用管了,最简单的方式是将文件中有关msyql密码的配置全部修改了,如何修改,在文件内找到类似的文案,写成下面的样子就可以了。就是这个样子“mysql://root:XXXXX@localhost:3306/badjs”,其中xxxx是你自己的mysql密码,前面的root就是你的账号(一般默认就是root了)。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

koa(实际上已经是koa2)用xtemplate时include无效?

遇到的问题如题,koa(实际上已经是koa2)用xtemplate时include无效?

可是我就是按照github官方的写法写的啊,看到一些博客也都是这样写的啊,为啥就无效呢?

就是这样写的

{{include ("header.xtpl") }}

其中当前文件和header.xtpl在同一层级,且都在模版引擎views指定的“顶级”目录,顶级就是没有到第二级。

以上就是病例~

查找了好久,最后想了想shell脚本执行的时候若是不做配置,需要利用’./’说明一下需要执行的脚本是在当前路径下,于是我就把上面的include修改成了下面的样子。

{{include ("./header.xtpl") }}

没有想到居然真的好了,后面想一下,这里(views)和静态目录(static)的设置不一样,static将整个静态资源放的访问都指向了这个默认的静态目录,也就是静态资源有了一个绝对访问地址,但views里面的访问还是需要采用相对的方式来引用。

总之,解决问题了就好了!

PS:看现在github官方的写法也已经改成了{{include (“./header.xtpl”) }}这种写法。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

mac下Charles无法抓到chrome的包

查了半天,原来是chrome需要自行配置代理,如何设置代理呢?

chrome版本:65.0.3325.181

chrome右上角找到三个点的图标,点击选择设置,然后下拉到最后的高级,下来在“系统”(这个版本是在倒数第二个)的条目下找到“打开代理设置”,然后双击打开之后,打开之后找到代理的tab点开,点开之后可以看到请选择一个协议进行配置,这个时候找到“网页代理(http)”和“安全网页代理(https)”,进行相应的配置就可以了,一般来说自己不做其他处理,直接配置代理服务器为“127.0.0.1”,端口(就是冒号:)后是“8888”。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

利用chrome扩展FireShot对整个页面截屏保存成图片或者pdf

利用chrome扩展FireShot对整个页面截屏保存成图片或者pdf。

具体方法,到chrome扩展商店找到FireShot,然后安装就可以使用了。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

mac下badjs启动报phantomjs相关错误

mac环境,badjs报错信息如下

Error: Command failed: /Users/xxxxxxxx/badJs/badjs-installer/badjs-web/node_modules/phantomjs/lib/phantom/bin/phantomjs /Users/xxxxxxxx/badJs/badjs-installer/badjs-web/node_modules/node-highcharts-exporting/lib/highcharts-convert.js -host 127.0.0.1 -port 8787

查了一下,发现是phantomjs已被废弃了,需要安装phantomjs-prebuilt,安装在badjs-web目录下,npm install phantomjs-prebuilt –save,安装完成后在这个文件下“badjs-installer/badjs-web/node_modules/node-highcharts-exporting/index.js”,将
phantomjs = require(‘phantomjs’); 替换成phantomjs = require(‘phantomjs-prebuilt’)

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

linux利用du查询当前目录下文件和目录的大小

linux版本centos

有关du的命令很多,直接说解决上面问题的命令吧。

命令: du -sh *

若是我想要给结果排序,利用sort命令;

从大到小命令:du -s * | sort -rn
从小到大命令:du -s * | sort -n

除了排序,还可以选出前十个和后十个

前十个命令:du -s * | sort -rn | head
后十个命令:du -s * | sort -rn | tail

除了上述命令还可以利用–max-depth,表示查询深度来展示当前目录下文件和目录的大小。

更多有关du的命令可自行查询。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

利用a标签自动解析URL

对于window.location,我们比较熟悉,它有protocol,hostname,host,port,search,hash,href,pathname等属性,a标签也和window.location一样,也有这样属性,这样可以方便我们分析网址,闲话少说,上代码。

function parseURL(url) {
    var a =  document.createElement('a');
    a.href = url;
    return {
        source: url,
        protocol: a.protocol.replace(':',''),
        host: a.hostname,
        port: a.port||'80',
        query: a.search,
        params: (function(){
            var ret = {},
                seg = a.search.replace(/^\?/,'').split('&'),
                len = seg.length, i = 0, s;
            for (;i<len;i++) {
                if (!seg[i]) { continue; }
                s = seg[i].split('=');
                ret[s[0]] = s[1];
            }
            return ret;
        })(),
        file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
        hash: a.hash.replace('#',''),
        path: a.pathname.replace(/^([^\/])/,'/$1'),
        relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
        segments: a.pathname.replace(/^\//,'').split('/')
    };
}

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

数组去重(js代码片段)

利用es6的set方法来实现数组去重,但数组内的元素不能是对象~

源码:

function dedupe(array) {
  return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]) // [1, 2, 3]

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

python爬取百度热点并入库到mongodb

python版本3.6,代码中用到的扩展库请自行安装,mongodb链接采用了本地链接,端口也是默认端口,说白了就是装了之后就是这样子链接的配置。

直接上代码

from urllib.request import urlopen
from bs4 import BeautifulSoup
from pymongo import MongoClient

sietList = []

#爬取以及处理字段
bsResult = urlopen("http://top.baidu.com/buzz?b=1").read().decode('gbk','ignore');
bsObj = BeautifulSoup(bsResult,"html.parser");
listObj = bsObj.find(class_="list-table").findAll('tr')

for item in listObj:
	keyWordsItem = item.find('a',class_="list-title");
	if(keyWordsItem):
		sietList.append({
			'keyWord' : keyWordsItem.get_text(),
			'keyWordUrl' : keyWordsItem.attrs["href"],
			'keyWordIndex' : item.find('td',class_="last").find('span').get_text()
		})
	

#入库
client = MongoClient("mongodb://localhost:27017/")
db = client.baiduhw
posts = db.posts
posts.insert_many(sietList)

print('done')

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

wordpress防止垃圾评论

用wordpress建站若是不做设置和处理的话经常会被注入很多垃圾评论,这里教大家一个简单设置能够屏蔽到一大部分垃圾评论的方法~~

说方法前,先说一下垃圾评论是怎么自动填入到我们站点的,其实很简单就是找到有特定标识的输入框,然后去注入~~~

我们处理方式页很简单,就是不能让他随随便便就注入了,要给他增加门槛,正好wordpress对评论可以设置成登录用户才可以评论,所以我们设置一下就可以了,具体怎么设置如下:

wordpress版本:4.9.4

进入仪表盘,然后选择“设置”-》“讨论”-》“其他评论设置”-》“户必须注册并登录才可以发表评论”勾选上就可以了。

上面针对的是已经汉化版本的,若是英文版本的,英语好的自己去对应找吧,应用差一点的可以走下面的流程。

进入仪表盘,然后选择“settings”-》“Discussion”-》“Other comment settings”-》“Users must be registered and logged in to comment”勾选上就可以了。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

mac下浏览图片

mac下打开图片后不支持左右翻看图片~~这感觉挺不爽的,于是了解了下,发现最简单的方式是选中一个图片后,按下空格打开图片,然后按“上”和“下”就可以翻看图片了,但不好的地方是这种方式非图片的也会被打开预览~~~虽不是那么方便,但直接可以用~~

一些其他方案参考:https://www.zhihu.com/question/20705417

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

ant dva 配置.webpackrc的extraBabelPlugins时报”.libraryName is not a valid Plugin property”的错误

node版本8.9.3,dva版本2.1.0,dva-cli版本0.9.2~~

将原来的写法改成了这样,就好了,注意看,相当于给extraBabelPlugins的属性值又多包了一层”[”

{
    "extraBabelPlugins": [["import", {"libraryName": "antd", "libraryDirectory": "es", "style": "css" }]],
}

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

JavaScript清除所有localStorage和cookie

直接上源码吧

//清除localStorage
localStorage.clear();
//清除cookie,
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++) {
    var cookie = cookies[i];
    var eqPos = cookie.indexOf("=");
    var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
    document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/";
}

说明:清除localStorage简单管用,但cookie并不一定有用,因为cookie设置和清理都要具体到路径,而上面只清理了根目录和当前目录,若是存在N级目录的情况,还需要自行单独加路径。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

微信唤不起支付框

时间:2018/01/26

背景:出口扫码付在支付宝环境支付可以,但到了微信就不可以了,而且地段还很明显,基本上上报反馈的都是广州深圳那边~~~

分析:首先查询相关的结果是不是返回到了前端,结果发现不论是支付宝还是微信都返回来了,这说明网络没有问题,网络没有问题,还调不起来,那最大的可能就是微信本身除了什么问题?还是由于某种原因js报错了?微信是不是出问题管不了,先看一下是不是由于微信的问题引起了js报错,于是开始利用window.onerror埋点收集看一下是不是js报错了。日志刚收集就断断续续有了如下报错信息“WeixinJSBridge is not defined”,经过查看这个信息大部分并不属于我们项目js报的,而是微信抛出来的~~不着急继续看,不一会儿发现了我们调支付的那行代码也有报这个错误了,这个时候基本上可以确定了,就是这个微信应该注入到webview里面的变量没有注入成功造成了这个问题。但还是很奇怪,为什么只有深圳和广州那边有人报呢?这个不敢断定,但极有可能和我们引入的一个国外监控资源有关,在那边的某些节点这个国外资源访问会受限,造成微信对页面的加载慢影响到了WeixinJSBridge的注入,当然这个只是猜测!

不管了,确定了报错信息,就找解决办法吧,于是找到了下面这么一篇文章浅析”WeixinJSBridge is not defined”

根据教程算是可以解决了,至少能够给一个错误提示了,同时为了避免那个国外资源影响到加载,我们也给去掉了,去掉之后到现在有12个小时了,还未收到问题反馈,不知道是不是好了~~

其中根据文章中说支付“直接使用JS-SDK文档中的支付代码,不要使用公众号支付文档里面的代码”未尝试,不过若是再做支付会采用JS-SDK的文档了,毕竟之前踩了这个坑,大家也可以考虑用JS-SDK的文档中支付代码。

相关内容直接跳转去看吧,就不做搬运工了。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

Mac 以及移动端 抓包工具 Charles 的使用

Charles 是个很牛逼的抓包工具写爬虫的同志们估计就很熟悉了,经常用这个干坏事!

首先,我们去下载Charles破解版http://pan.baidu.com/s/1jHFv0GI 里面带有破解包charles.jar,下载后按照提示安装,安装之后点击右键显示包内容进入Resource文件中的java文件替换charles.jar 。

替换完成后可以打开了,不过这里可能存在问题,提示类似“您需要安装旧 Java SE 6 运行环境才能打开charles”的文案,若是遇到的话,到苹果官网下载javaforosx.dmg并安装,然后在打开应该就可以了。

打开后界面如下:

为了能够抓到mac下的访问,我们要简单做一下这样的设置:

以上步骤都完事,理论上就可以抓到电脑上的代码了。下面看怎么抓到移动端的(必须令电脑和手机在同一个局域网段),这里和fiddler很像,若是对fiddler有了解的应该清除,首先应该安装证书,这里和fiddler有些不一样,直接利用charles提供的下载就可以,点击这里,点击完成之后安装。

这里提示一下,IOS高版本,安装完证书后还要启用一下,启用位置是 设置-》通用-》关于本机-》证书信任设置(最下面),打开后把charles打开就可以了。

然后,要做的就和fiddler一样要看本机的ip地址,本机ip地址查看可以利用终端输入ifconfig,也可以点开屏幕右上角的小苹果-》系统偏好设置-》网络-》选中自己的网络,然后点击左下角偏上一点的高级,随后切换到TCP/IP的tab就可以看到自己的ip地址了,看到ip地址后需要在手机上设置代理了哦!

打开手机,设置—》无线局域,选择和电脑同一网段的网络点击进入设置详情(这里每个手机情况可能不同,如IOS是一个被圈起来的蓝色感叹号),进入后滑动到下面,设置Http代理服务器地址填写你mac上的IP地址端口号填写8888 步骤如下:

填写完毕之后Charles窗口会弹出一个提示这时点击Allow按钮即可到这一步就说明配置成功,你手机访问的网络便可以被Charles捕获到了!

用手机打开浏览器或者打开一个App在Charles窗口上都会捕获到访问地址这时你就可以分析他们的请求数据格式进行数据爬取!

温馨提示:不用代理抓包的时候记得把手机上的代理关掉,省的造成代理设置还在,但charles关了造成无法访问网络的情况。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

nodejs抓取网页邮箱

用到的正则匹配还是不太准确,也并未做到在全网去搜索邮箱地址,需要先限定位置,再去匹配,总之还有很多需要处理的问题,废话不多说了,直接上代码吧,以贴吧为例(其中用到的有些工具包需要自行安装):

var express = require('express');
var superagent = require('superagent');
var cheerio = require('cheerio');
var url = require('url');
var fs = require('fs');
var eventproxy = require('eventproxy');
var ep = new eventproxy();
var app = express();
 
var getUrl = 'http://tieba.baidu.com/p/3699247110?pid=66984513696&cid=0#66984513696';
var reg = new RegExp('[a-zA-Z_0-9-.]{1,}\@([a-zA-Z_0-9]{1,}\.){1}[a-zA-Z_0-9]{1,}', "gim");
superagent.get(getUrl)
.end(function (err, sres) {
    // 常规的错误处理
    if (err) {
        return next(err);
    }
    // sres.text 里面存储着网页的 html 内容,将它传给 cheerio.load 之后
    // 就可以得到一个实现了 jquery 接口的变量,我们习惯性地将它命名为 `$`
    // 剩下就都是 jquery 的内容了
    var arr = [];
    
    var $ = cheerio.load(sres.text);
    $('.d_post_content_main .j_d_post_content').each(function (idx, element) {
        while(tem=reg.exec($(this).text())){
            arr.push(tem[0]);
        }
    });
    fs.writeFile('getEmail.txt', arr, function (err) {
        if (err) throw err;
        console.log('It\'s saved!');
    });
});

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

将文件隐藏在图片中

工作中看到的内容,将文件隐藏在图片中:

#coding=utf-8

import zipfile
 
#创建zip文件,使用'a'追加模式,同时file指向一个已存在的非zip文件
zf = zipfile.ZipFile('g_e_index.jpg','a',zipfile.ZIP_DEFLATED)

 
#将文本文件附加到flower中
zf.write('host.txt')
 
#关闭zip文件
zf.close()

参考文章:http://zhujiangtao.com/?p=563
https://docs.python.org/3/library/zipfile.html#module-zipfile

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机

利用window.onerror捕获并上报Js错误,具体到某一行

之前都是用try{}catch(){}来捕获监听js报错信息,具体文章可以看js报错信息,以及文件加载失败问题的log日志统计方式,但这个监听的报错信息只能到具体的文件,并不能定位到具体哪一行报错了,于是根据业务需求找了一下,发现还真有其他方式可以实现,那就是window.error函数,具体看示例代码。

<!DOCTYPE html>
<html>
<head>
    <title>Js错误捕获</title>
    <script type="text/javascript">
    /**
     * @param {String}  errorMessage   错误信息
     * @param {String}  scriptURI      出错的文件
     * @param {Long}    lineNumber     出错代码的行号
     * @param {Long}    columnNumber   出错代码的列号
     * @param {Object}  errorObj       错误的详细信息,Anything
     */
    window.onerror = function(errorMessage, scriptURI, lineNumber,columnNumber,errorObj) {
       console.log("错误信息:" , errorMessage);
       console.log("出错文件:" , scriptURI);
       console.log("出错行号:" , lineNumber);
       console.log("出错列号:" , columnNumber);
       console.log("错误详情:" , errorObj);
    }
    </script>
</head>
<body>
    <script type="text/javascript">
      console.log('s')
      console.log(df)
    </script>
</body>
</html>

运行之后报错信息全出来了,由于故意写错的代码直接放到了html里面,所以报错的文件就是当前的html文件,若是引入的js文件,那报错文件就会是引入的js文件了。不错不错,这个真的很好用啊。

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机