Giter Club home page Giter Club logo

proloxin.github.io's People

Contributors

proloxin avatar

Watchers

 avatar

proloxin.github.io's Issues

notebook

secret notebook, don't submit comment pls.

主页开篇词

诉衷情

无心明月照归途,千里戍京夫。关河秋色遥寄,游子最孤独。
身是客,意何如,缚於菟。别妻离子,无处团圆,人在江湖。

2018-9-24 中秋

github pages 静态托管,git branch提交方式

1

push代码到master
注意 /dist 需被 git 记录,需从 .gitignore 中去除

2

git subtree push --prefix dist origin gh-pages

dist 是子树所在的目录名
origin 指 remote name
gh-pages 指目标分支名称

eg. tieba-tool
git subtree push --prefix unpacksge\dist\build\h5 origin gh-pages
注意 uniapp 编译时, manafest.json 中 h5 配置,修改运行时基础路径为相对./

勒索软件“假面”系列——免流软件

第一章 勒索中的“免流”

勒索软件是指启动后通过置顶自身窗口或重置锁机密码强制锁定用户桌面、使用户无法正常使用设备,并以支付解锁对用户进行勒索的软件。近年来,360烽火实验室始终密切关注勒索软件发展动向,并持续对勒索软件新技术新形式、勒索软件黑产、以及Android新版本系统在对抗勒索软件方面的新特性进行了深入研究。

在对勒索软件的长期跟进中我们发现,勒索软件是一类非常擅长伪装自己的软件,为了诱导用户下载安装运行,勒索软件通常会伪装成各种极具诱惑力、通过不正规手段牟利的软件,例如游戏外挂、代刷、盗版应用、WIFI密码破解、抢红包等等,这些软件拥有一定的用户群与传播途径,勒索软件正是利用了其易吸引用户、传播快的特点玩起了“假面游戏”。

一、勒索软件擅于伪装后传播

截止到2018年2月,360烽火实验室共捕获到Android恶意勒索软件80万个,而其中几乎所有的勒索软件都对自己进行了伪装,对这些勒索软件分类统计后发现,勒索软件的伪装类别多达十多种,其中以外挂辅助类最为普遍,流氓软件与色情类软件次之。
15210969555320 (1)

二、特殊的伪装——免流软件

在这些伪装类别中,我们发现有一类与日常生活中不可或缺的手机流量相关的软件——免流软件,这类软件名称多为“XX免流”或“XX云免”,号称能够让用户免流量费上网,并以此吸引用户下载安装,实运行后却是勒索软件。
15210969761092
在我们捕获到的勒索软件中,冒充免流软件的样本占比1.81%,虽然占比工具类低,但自成派别,数量不在少数,甚至超过了盗版软件。

大量勒索软件冒充免流软件进行传播的现象从侧面反映出了一个问题——免流软件本身占据着相当用户与传播市场。实际上确实如此,移动互联的发展推动了智能手机的网络访问量,特别是随着手机直播、在线视频、移动社交等产业的繁荣,智能手机流量的使用量不断攀升。根据工信部2018年2月发布的《2017年通信业统计公报》,2017年各月户月均移动互联网接入流量呈逐月增长的趋势,到12月已超过2G。
15210969843992
然而在国内,移动数据流量并不便宜,数据流量使用量的攀升使得部分人开始寻求廉价甚至免费的流量获取方法,免流软件应运而生并快速传播开来。截止到2018年2月,360烽火实验室共捕获到20万+个免流软件,其中部分软件的传播量已经达到了几百万次。巨大的软件数量与传播量进一步印证免流软件拥有着不小的市场,且我们在对免流软件与免流平台的分析过程中发现,免流软件已具备一定的产业规模。

第二章 免流软件

一、定义与分类

免流软件即安装后可以让用户在移动运营商网络下免流量或减少流量访问互联网的软件。免流软件根据其核心功能所在的位置可以分为本地免流与云免流,本地免流软件的核心功能环节通常位于本地,而云免流的核心功能环节则主要在VPN中完成。

(一) 本地免流

本地免流是指通过修改本地代理或者使用网络请求捕获与修改模块在本地修改用户网络请求(HTTP与HTTPs请求,本文均以HTTP请求为例)从而达到免流效果的方式。根据实现框架的不同,本地免流分为很多种,比较有名的有Tiny、Samp、Hap、Fmns等等,不同框架实现的免流软件对手机root权限与端口的要求不同,同时相应的免流模式语法也不同。但无论哪种框架是否需要root,最终目的都是通过一些手段修改本地的网络请求包,将免流混淆信息插入其中,从而把非免流流量伪装成免流流量。

本地免流软件主要由核心代理模块、免流模式、防跳工具三部分构成,这些模块通常都存放在软件的Assets目录下:

  1. 核心代理模块。核心代理模块通常使用Tiny、Samp等开源框架在本地搭建网络代理,其主要职责是根据免流模式对设备发起的网络请求进行修改;
  2. 免流模式。免流模式是免流成功的关键所在,它定义了对网络请求进行修改的规则,被核心代理模块所用;
  3. 防跳工具。防跳工具即用来预防跳点的模块。

跳点指的是那些未能成功免流、被计费检测系统正常进行计费了的流量。产生跳点的主要原因是部分流量不会经过本地代理,从而造成请求头修改失败。目前比较流行的防跳方式有单纯禁网与使用防跳工具,防跳工具的防跳原理与单纯的禁网不同,其还包括了修改防火墙命令,强制部分不走本地代理的流量去走本地代理,而对于部分免流系统不支持的协议(如QQ、微信等),则可以用规则将其放行,使之能正常访问网络,这种情况叫做半免。防跳工具就是用于减少跳点带来的额外流量费的工具。目前比较流行的防跳工具有扫地僧防跳与终极防跳。

(二) 云免流

云免流是指通过连接特定VPN服务器实现免流上网的方式。与本地免流不同,云免流用户不用自己去进行核心模块安装、防跳设置等繁琐操作,仅需要使用VPN软件连接特定免流VPN服务器即可实现免流。云免流相当于把原来本地免流的一套系统搬到了VPN服务器上,VPN服务器作为一个代理服务器,代理并修改用户设备发出的所有网络请求,进而达到用户免流量上网的目的。在云免流中有服务端与客户端之分,服务端即VPN服务器,目前搭建LinuxVPN服务器较常用的是OpenVPN开源框架;客户端即用户设备上安装的VPN连接软件,很多免流平台(VPN服务端)都为用户提供了特定的客户端软件,用户只需要安装客户端软件与服务端下发的配置文件,并在免流平台购买VPN卡密,即可通过客户端软件连接VPN来实现免流。

以某款免流平台为例:用户首先需要在免流平台购买免流套餐,包月套餐通常为几块钱不等,免流平台支持的支付形式多样,可购买多张,通常多买会有优惠政策:
15210969971201
购买成功后卡密(即激活码)会返回到订单详情中,同时,客户端软件的链接也会一并提供给用户:
15210970064863
用户通过链接下载客户端软件并通过卡密激活后就可以安装线路使用了。云免软件通常给用户提供了多条线路,如下图,用户可根据自己所在的运营商与地区情况选择可用的线路,只有在可用线路下才能成功免流。
15210970149059

二、两大必备因素

免流软件的存在依赖于两个必不可少的因素:免流IP、移动运营商代理服务器与计费检测系统的分离。

(一) 免流IP

移动运营商为了方便用户访问其提供的各种服务,通常会为用户提供特定的免流优惠政策,比如,当用户用数据网络访问移动运营商掌上营业厅时不会向用户收取流量费,由此产生了一些免流量计费的IP,即免流IP。运营商计费检测系统把所有免流IP放入了一份白名单,当用户流量进入计费检测系统以后,计费检测系统会判断该用户流量访问的IP是否在白名单中,若在就不会进行扣费;

(二) 代理-计费分离

对于运营商而言,代理服务器与计费检测系统是两个业务量都很庞大的系统,为了系统管理升级与日常维护,这两个系统被做成了分离的模块,并运行着不同的网络请求处理机制。当用户访问互联网时会向运营商代理服务器发送一条请求信息,这条请求信息的头部包含了目的IP、源IP、UA、网络协议、文件类型等详细信息,代理服务器与计费检测系统从请求头获取目的IP,并分别以此代理用户网络请求或判断用户流量是否需要计费。免流软件正是不正当利用了代理服务器与计费检测系统检测机制分离这一特点,通过自定义网络请求头,使二者从请求头中获取到的目的IP不一致,从而达到欺骗计费检测系统、免流上网的目的。同时,由于各运营商、各地区的计费检测系统检测机制存在差异,不同模式的免流软件具有不同的应用场景与地区限制。

三、原理

免流软件的本质是用户端的流量欺骗,而实现欺骗的基本原理就是修改设备上发起的网络请求,用伪造的请求头欺骗运营商计费检测系统从而实现免流。
15210970347261
防跳程序会优先处理设备发起的网络请求,根据防跳策略或禁网或放行或强制网络请求走本地代理。当网络请求经过本地代理时,本地代理会根据免流模式对该网络请求的头部信息进行修改。修改过后的网络请求经过运营商代理服务器与计费检测系统得到不一样的效果,运营商代理服务器检测到的是真实访问的IP,而计费检测系统检测到的是免流IP。

早期出现了很多种“简单粗暴”的免流模式,传播较广的有前\后缀免流、端口免流、伪彩免流、双Host(或是Host—X-Online-Host)免流等,这些免流模式分别利用了运营商提供的免流前\后缀、免流端口与免流文件类型、以及运营商不检查多个重复字段的策略。随着运营商系统不断优化升级,不同地区运营商已根据自身策略情况在其代理服务器与计费检测系统中逐渐加入了针对此类攻击的校验机制,如校验获取的Host与Host字段内容的一致性、封掉原来的137/138免流端口、一旦检测到多Host或X-Online-Host字段就不免流等。

然而,免流模式也在随着运营商计费检测系统的升级不断演变。现今多数免流模式都采用了“字段伪装”的方式,即通过某些混淆信息将特定字段伪装起来,使代理服务器能够识别该字段而计费检测系统识别不了该字段,以此来达到蒙骗计费检测系统的目的。这种混淆信息可能是一个新的请求头字段,也可能是对原有字段的修改,甚至还有可能是一个空格或一个特殊字符等。

通常情况下,运营商代理服务器只能够解析三种固定格式的请求头,对于这三种固定格式的网络请求,代理服务器从中读取IP的方式是固定的(HTTPs与HTTP请求头有差异,这里以HTTP为例):

1.请求方法中的Host与Host字段一致:此时运营商代理服务器直接解析请求方法后跟的www.baidu.com:
15210970778778
2.请求方法后Host信息缺省:运营商代理服务器主动放弃从请求方法行寻找Host,转而解析Host字段内容www.baidu.com,并把Get后的内容作为Uri:
15210970847302
3.请求头中存在X-Online-Host(移动私有代理协议)字段:运营商代理服务器会优先解析X-Online-Host的内容为Host:
15210970927320
目前存活的免流模式绝大多数都是在以上3种固定请求头格式上做文章,通过免流模式对其进行增删改。由于运营商系统的不断升级完善,免流模式十分灵活多变,并且更新换代的速度很快,通常特定的模式只能留存很短的时间,一旦免流模式所针对的缺陷被修补,该模式将不再奏效。同时,由于运营商计费检测机制不透明,新的有效的免流模式往往要经过很多次试验才能被发现。

四、免流模式实例

以伪装双Host免流模式为例。伪装双Host免流模式即伪装起来的双Host字段请求头——去掉原请求头中请求方法后跟的Host,并且添加一个新的Host字段,使修改后的请求头实际上拥有两个Host字段。由于现在绝大多数运营商计费检测系统屏蔽了(不免流)双Host流量,所以必须把其中一个Host字段通过某种方式伪装起来,使计费检测系统识别不了它,具体实现方式是通过免流模式向请求头中加进混淆信息。

以一款名为“离调双Host”的Tiny免流模式为例,下图为该免流模式配置,其中http_ip表示代理服务器IP、http_port表示代理服务器监听端口、http_del表示删除原请求头中的指定字段、http_first表示按指定格式修改请求头首行。
15210971034967
设备中各应用程序发起的网络请求(除跳点外)在进入运营商代理服务器之前,会被核心模块按照以上文件配置进行修改,如下图左的请求头被修改后将会变成如下图右所示:
1521097111344
经该免流模式处理过之后,原HTTP请求头中出现了两个Host,其中一个Host前有两个中文字符,而请求方法行中已经没有了Host信息。根据上文提到的第(2)种固定请求头格式,对于新请求头,运营商代理服务器读取到的Host是www.baidu.com,而对于计费检测系统,因为有两个中文混淆字符,其不能从第二行开头获取Host字段标识,所以它选择从第三行的Host字段去获取Host——wap.10086.cn这个免流Host,因此最终达到了免流的目的。

以上只给出了一种经典的免流模式案例,现今存活的很多免流模式伪装方式千奇百怪,但万变不离其宗,最终的效果都是要欺骗计费检测系统去获取免流Host并以此实现免流。

五、定向流量卡

现在市场上有很多的“免流卡”,例如腾讯大王卡/天王卡、微博大V卡、蚂蚁宝卡等等,通常是互联网厂商与运营商合作推出的、促进本厂软件推广、增加用户粘性的手段。这类“免流卡”的主要特色是对特定来源的流量不收取流量费或一定限额内不收取流量费。以腾讯和联通合作推出的大\小王卡为例,运营商计费检测系统在检测到流量属于“腾讯系”(微信、腾讯视频、王者荣耀等)流量时,流量被自动计入包月的定向流量包,从而实现面向用户的免流。因此,与之前介绍的免流原理不同,这类“免流卡”实际上是一种定向流量包。

第三章 付费免流软件生态

一、完整的角色分工

免流软件发展至今已经有了成熟的生态链,这种生态链围绕着付费免流软件展开。目前付费免流软件的主要活跃场所是QQ群,我们一共找到了430个免流相关QQ群。免流QQ群在整个付费免流软件交易链中扮演着纽带角色,它为不同参与成员提供了一个咨询沟通与交易平台。在一个完整的免流QQ群中,主要包含以下几种角色:

(一) 模式贡献者

模式贡献者是指提供免流模式的成员,这些成员负责向购买免流软件的用户提供可用的免流模式并不定时更新免流模式。因为免流模式决定了免流软件是否可用,因此这类成员是免流QQ群赖以运行的基础,一般是群主或者管理员。免流模式通常由模式贡献者自己学习编写或者从别处收购而来;

(二) 推广代理

推广代理是指不涉及免流软件销售、仅负责对交易平台进行推广的成员,其主要职责是寻找有使用免流意向的用户,拉其加入所在QQ群,并向用户推荐咨询购买人。通常推广代理的收入来源与其成功拉进QQ群的用户数量成正比;

(三) 分销代理

分销代理是指位于群主&管理员与用户之间的分销人,其通常出现在提供了云免流的QQ群中,成为分销代理需要先交纳一定金额的代理费。分销代理的主要任务是从群主&管理员处以低于直销价格的价钱批发云免流卡密,并以高价分销给用户。如下为一个QQ群提供的分销、加盟价格表,可以看到分销代理拿到的价格远低于用户直接从群主&管理员处购买的价格,分销代理正是利用这种价格差获利;
15210971212964

(四) 加盟者

加盟者相当于高级代理,同样也要先缴纳一定金额加盟费,加盟费要高于代理费。成为加盟者后,不仅可以用比分销代理更低的价格购买免流模式与卡密,还可以像群主学习编写免流模式,并自主经营销售群主或自己编写的免流模式,其获利空间远大于推广代理与分销代理;

(五) 用户

用户是免流软件的最终消费者,其可以从群主&管理员处直接购买免流软件,也可以通过分销代理购买。购买免流软件的用户在免流模式失效后通常可以免费获取新的免流模式;

(六) 群主&管理员

群主与管理员作为免流QQ群的管理者负责统筹全局,除了最基本的QQ群管理、咨询答疑任务外,通常还负责直销、提供免流模式、招收代理加盟等任务。
15210971302907
除了出售免流软件与模式,部分免流QQ群还提供额外的App定制与服务器租赁业务,为用户提供“全方位”、“一条龙”的服务。同样,这种业务价格也不高,给用户一种“远比从运营商那里购买流量划算”的感觉。付费免流软件主打的就是“低价格”牌,以远低于运营商的价格为用户提供流量服务。实际上,这种“薄利多销”的方式带来的收入相当可观,因为免流软件是一种几乎不需要成本的软件,一方面开发成本低,免流软件框架都是通用的,只需填入新的免流模式即可,而免流模式开发门槛低,一旦学会可以无限尝试;另一方面运营成本低,维护好一个QQ群并定期更新模式或贩卖卡密即可无限获利。

二、免流QQ群

在我们发现的免流QQ群中,有22个是付费群,入群付费金额从0.1~10元不等,其他的是免费群,基本只要申请加群就可立即进群。这些群分布于全国各个地区,尤以广东、山东居多。此外,在这些群中甚至有6个拥有QQ群平台认证机构标签。
15210971388405
通过对群主与成员分布分析后发现,这些QQ群的群主基本都是90后与00后,而在群成员中,男性比例远高于女性比例,90、00后成员比例远高于其他年龄段比例。免流软件的用户群普遍偏年轻化与男性化,这与用户群的收入、“黑科技”关注度有一定关联。
15210971464948
通过对这些免流QQ群的长期观测发现,群成员数在稳步增长,免流模式也在不断更新,免流群保持着相当活跃的状态。此外我们还发现,不少免流群经营的业务并不限于免流软件,而是同时涉及了代刷代挂、游戏外挂、黑客工具等多种产业,而这些产业都是勒索软件中占比较高的伪装类别。

三、免流的“风险”与“暗阱”

免流软件以“减免”流量费吸引用户,实际上背后隐藏着很多风险。一方面,免流软件实质是一种利用运营商计费检测系统机制打擦边球谋取私利的行为,虽然现在没有明文法律规定禁止,但这种不规范行为极有可能受到严惩;另一方面,普通用户不易识别免流软件的真伪,盲目下载安装或付费购买有较大安全隐患。

(一) 免流有“风险”

免流是一种“小偷”行为,一旦被查处后果严重。自2017年起,部分地区的运营商已经开始严打“流量小偷”,如广西移动2017年初发表了严打不正当使用流量的行为的公告:
15210971554943
工信部也在2017年初发表清理规范互联网网络接入服务市场的公告,VPN接入也在清理之列。无论是本地免流还是云免流在未来都有可能面临被“一锅端”的局面,窃取流量的行为极有可能为自身带来严重后果(赔款、被起诉、抹黑信誉)。
15210971629355
免流有效时间有限,得不偿失。由于VPN市场被整治与运营商对计费检测系统的升级完善,特定免流软件可能过一段时间就失效了。有些人花费钱财去购买免流模式与云免流卡密,但却很快就不能用了,得不偿失;

免流软件泛滥,真假难辨。出于免流软件可以免费无限使用流量的特性,免流本身就会容易吸引用户下载安装与传播,一些恶意软件开发者打着免流的噱头诱导用户下载安装,安装后却实施恶意行为,比如锁屏勒索、诱导下载安装、隐私窃取等。对于云免流,由于VPN免流服务器搭建流程简单、成本较低,恶意软件开发者甚至可以用较低的花费搭建虚假免流平台,为进一步实施恶意行为做铺垫。此外,云免流所用到的服务器绝大多数都是租赁的,有租用期限限制,很多免流平台所有者因VPN服务器租用期满就放弃了维护免流平台甚至卷款潜逃,因此造成钱财损失的用户与分销代理比比皆是。

(二) 免流藏“暗阱”

除了锁屏勒索,还有很多其他类型的恶意软件也热衷于利用免流旗号推广传播,常见的有诱骗、隐私窃取、私自安装、恶意广告等,而由于少部分可用的免流软件还来源于各大贴吧论坛,用户在从这些地方下载未知来源的所谓的免流软件时通常会降低防备,这进一步给利用免流行恶的软件的传播带来了空间。

  1. 诱骗

这类软件启动后用“免流插件”或“免流注册”等形式诱导用户进行下载、支付、或填写隐私信息,造成用户资费消耗、隐私信息泄露甚至财产损失。下图是一款名为“TY免流”的软件,启动后显示软件注册页面,要求用户通过QQ联系开发者,在联系到开发者后,该QQ所属人要求用户支付一定金额才提供给用户注册码,但实际上该软件本身并未包含有效代码,所以是诈骗的可能性较大。对用户而言,这类付费购买真假难辨,盲目付费极有可能造成财产损失。
15210972179805

  1. 远控&隐私窃取

这类恶意软件伪装成免流软件诱导用户下载,启动后通常会隐藏桌面图标并在后台接收远控指令,根据远端服务器发送过来的指令监控短信或通话记录、私发信息、窃取用户隐私,给用户的隐私与财产安全带来了严重威胁。下图为一款名为“王者免流”的软件,软件启动后立即隐藏图标,并在后台接收控制指令进行拦截与转发短信、获取通讯录、私设来电转移等恶意行为。
15210972582011
15210972873018

  1. 私自安装

这类恶意软件开启后从界面上看与免流软件无异,以成功搭建免流环境为由要求用户授予root权限,随后私自拷贝其他推广或恶意应用至系统目录并强制重启手机完成安装。实际上,由于root权限是某些特定模式的免流软件必备的条件,只要恶意软件以免流名义申请root,用户通常都会直接授予,而一旦被授予root权限,恶意软件相当于接管了用户设备,想干什么都可以。下图为一款名为“云流量”的应用,在获取root权限后把一个勒索子包放到了系统应用目录下,随后立即重启手机完成恶意子包的安装:
15210972957381

  1. 恶意广告

免流软件也是恶意广告重灾区,恶意广告正好利用了免流软件易于传播的特性。有些恶意广告打着免流软件幌子实际根本没有免流功能,而有些则是重打包那些传播较广的免流软件,并在其中插入了恶意广告插件。下图为一款名为“鑫哥本地云免流”的软件,该软件具有云免功能,但启动后会定时弹出霸屏广告,此时用户不小心碰到屏幕就会下载软件,严重影响了用户对设备的正常使用:
15210973037918

结束语

勒索软件冒充免流软件传播的现象已经屡见不鲜,用户设备安全收到了严重损害。免流软件作为一种不规范利用运营商计费机制的流量窃取软件,拥有着一定用户群与传播渠道。免流软件的肆意传播会给运营商与用户带来财产损失与不可预知的风险,对于运营商而言,免流软件带来的流量外泄会给企业系统安全与盈利带来不利影响;对于用户而言,诸如勒索软件一类冒充免流软件诱导下载的软件会给用户隐私财产安全带来威胁。

面对此种现状,运营商、用户都应该积极应对、减少自身损失。

运营商。运营商作为数据流量供应商与免流针对的受损方,从自身利益出发应该对免流软件“主动出击”,密切关注免流软件动态,跟进最新的免流模式原理,并及时升级完善计费检测系统,尽早预防免流软件对企业系统与盈收造成影响;

用户。免流软件本身就是一种不规范的软件,此外很多恶意软件都盯上了免流这块“沃土”,肆意使用不仅有违规被罚的风险,用户个人隐私、财产与设备安全也将面临很大的风险。建议用户谨慎使用免流软件,尽可能通过正规途径获取流量。

@360安全卫士,转载自FreeBuf

md教程

欢迎使用 Markdown在线编辑器 MdEditor

Markdown是一种轻量级的「标记语言」

markdown

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面,Markdown文件的后缀名便是“.md”

MdEditor是一个在线编辑Markdown文档的编辑器

MdEditor扩展了Markdown的功能(如表格、脚注、内嵌HTML等等),以使让Markdown转换成更多的格式,和更丰富的展示效果,这些功能原初的Markdown尚不具备。

Markdown增强版中比较有名的有Markdown Extra、MultiMarkdown、 Maruku等。这些衍生版本要么基于工具,如Pandoc,Pandao;要么基于网站,如GitHub和Wikipedia,在语法上基本兼容,但在一些语法和渲染效果上有改动。

MdEditor源于Pandao的JavaScript开源项目,开源地址Editor.md,并在MIT开源协议的许可范围内进行了优化,以适应广大用户群体的需求。向优秀的markdown开源编辑器原作者Pandao致敬。

Pandao editor.md

MdEditor的功能列表演示

标题H1

标题H2

标题H3

标题H4

标题H5
标题H5

字符效果和横线等


删除线 删除线(开启识别HTML标签时)

斜体字 斜体字

粗体 粗体

粗斜体 粗斜体

上标:X2,下标:O2

缩写(同HTML的abbr标签)

即更长的单词或短语的缩写形式,前提是开启识别HTML标签时,已默认开启

The HTML specification is maintained by the W3C.

引用 Blockquotes

引用文本 Blockquotes

引用的行内混合 Blockquotes

引用:如果想要插入空白换行即<br />标签,在插入处先键入两个以上的空格然后回车即可,普通链接

锚点与链接 Links

普通链接
普通链接带标题
直接链接:https://www.mdeditor.com
[锚点链接][anchor-id]
[anchor-id]: https://www.mdeditor.com/
mailto:[email protected]
GFM a-tail link @pandao
邮箱地址自动链接 [email protected] [email protected]

@pandao

多语言代码高亮 Codes

行内代码 Inline code

执行命令:npm install marked

缩进风格

即缩进四个空格,也做为实现类似 <pre> 预格式化文本 ( Preformatted Text ) 的功能。

<?php
    echo "Hello world!";
?>

预格式化文本:

| First Header  | Second Header |
| ------------- | ------------- |
| Content Cell  | Content Cell  |
| Content Cell  | Content Cell  |

JS代码

function test() {
	console.log("Hello world!");
}

HTML 代码 HTML codes

<!DOCTYPE html>
<html>
    <head>
        <mate charest="utf-8" />
        <meta name="keywords" content="Editor.md, Markdown, Editor" />
        <title>Hello world!</title>
        <style type="text/css">
            body{font-size:14px;color:#444;font-family: "Microsoft Yahei", Tahoma, "Hiragino Sans GB", Arial;background:#fff;}
            ul{list-style: none;}
            img{border:none;vertical-align: middle;}
        </style>
    </head>
    <body>
        <h1 class="text-xxl">Hello world!</h1>
        <p class="text-green">Plain text</p>
    </body>
</html>

图片 Images

图片加链接 (Image + Link):

Delphi7皮肤控件VCLSkin5.60安装

官方网站:http://www.link-rank.com/
LE4-BLACKC

安装步骤:

  1. 从网上下载VCLSkin,我这里下载到的是5.6 Full Source版本,解压到硬盘;
  2. 打开Delphi 7→菜单栏→Tools→Environment Options→Library→右边的“...”,添加刚才解压的VCLSkin目录下package文件夹和source文件夹,如下图所示:
    0_129890794900vT
  3. 下面打开Delphi 7使用的VCLSkin版本,菜单栏→File→Open→.../VCLSKIN/package/WinSkinD7R.dpk,弹出对话框提示找不到资源文件,如下:
    Cannot find resource file: F:/***/VCLSKIN/package/WinSkinD7R.res. Recreated.
    点击OK,就会重建了。然后,在Package对话框点击Options,在Description选项卡→Usage Options,选中Designtime and runtime,按OK确定,再点击Compile就可以了。如下图所示:
    0_1298908170e1ED
    保存文件,关闭文件。
  4. 跟上面步骤一样打开.../VCLSKIN/package/WinSkinD7D.dpk,也一样弹出找不到资源文件,按OK重建。点击Compile,然后再点Install,安装顺利的话就会弹出安装成功对话框,提示新组件 WinSkinData.TSkinData, WinSkinStore.TSkinStore注册完成,如下图所示:
    0_1298908187m4Bj
    保存文件,关闭文件。在面板上多了VCLSkin面板,下面2个组件,分别为TSkinData和TSkinStore,TSkinData 主要用于美化你的程序, 只要把TSkinData控件放下去,它就能自动美化所有窗体;TSkinStore 能让你在设计模式时储存多个skin文件。
  5. 下面开始测试应用。新建一个应用程序,拖动SkinData控件到窗体上,设置其SkinStore属性,这是可以把skin文件储存在应用程序当中,然后设置Active属性为True,编译运行程序,效果如下图所示:
    0_12989082174Ms4

0_12989082301Yem

丙申新年贺词

今天确是旧历丙申猴年第一天,但“新年贺词”是哗众取宠。有太多的事不吐不快但不能说,野夫怒见不平事,磨损心中万古刀。仍然不肯轻易被岁月磨平的棱角,觊觎于文字里长生。

年前翻出来以前写的文章,小时候常给远方的姑娘写诗,看到其中写过的一句“诗笔绝章剑与酒,为谁倾倒为谁狂”。那时我风华正茂啊,我年少意气啊,我仗剑任侠壮游天下啊,我语不惊人死不休出口要成诗啊。后来我知道,民国时候的流氓都喜欢写诗,所以经常有街头混混打架,大混混一脚下去把小混混踹翻,小混混忙爬起来,手一拱,“兄台打架这么厉害,想必作的一手好诗吧”。思忖再三,我决计还是改了几字,叫“诗笔文章刀下酒”。我用几年的时间磨了这把刀,太锋利,刚好可以拿来切半斤牛肉,剥一碟花生。曾经我立志写一篇惊世的文章,作一首盛唐的诗,但写字这回事,太难。12年是我的高山,过了这山,眼界就开阔了。再翻越高山无从谈起,只好不写,一搁笔就到了今天,我仍然写不了惊世的文章。但我一定要记录,因为太多的历史你不写他就没了,没人为凡人立传,我要借文字而留存。有太多的感慨找不到人诉说,所以纸就是你的情人。我用十二分的力气写朴实的话语,宁愿写到筋疲力尽,好像接连跑了几个四百障,因为我笔下有情。让一个浪子不喝酒是不可能的,所以古龙穷得身无分文也要让一个酒鬼喝尽关外的酒。

而我在关外生活了四年,宛平城旧称拱极城,是拱卫京城的最南门户,抗日的烽火就从这里燃起,一千多个夜晚我沿卢沟桥眺望宛平城楼,如果不写她,就像一个浪子不喝酒。起初我写“塞外冬风吹铁马,卢沟漾月映霜花”,不足以描述她的厚重,太沧桑。这儿葬了两个将军,这儿开了1937年的第一枪。一站公交远的西道口公路边有一座墓地,“抗日烈士赵登禹将军之墓”,太简单的十一个字,以致太多的路人行色匆匆从这里经过还以为是一座明清古墓。出了宛平城正对的就是卢沟桥,从金代始建经历朝修葺至今风雨沧桑古貌弥新。桥上还有二十九军留下的弹孔,为这座古拱桥更添了一份凝重。桥下流淌千年不绝的是永定河,古称无定河,就是“可怜无定河边骨,犹是春闺梦里人”的那条河。康熙改一字以求永定,讽刺的是二百年后**的国门恰恰是从这里被弹丸小国一炮轰开。如今卢沟晓月是燕京八景之一,人们喜欢在这里观景赏月,追忆古时离人在这里沐着月色挥手分别,唯独记不起佟麟阁将军率领二十九军将士抵抗外侮长眠于此。“卢沟如敌来犯,明知必死,也必以死付之”,这句话丫鬟妃子电视上不说,美女屌丝电影里不说,相亲大会上也没人说,但我如果不写下来我觉得心不安。如今我乘624路公交车从不肯坐,一是为了礼让老人,一是为了致敬烈士。这是我固执的情怀,然而也仅仅只能这样罢了。

回家后上坟祭祖,农村老家淳朴依旧,小路积雪还没完全化掉,拐弯抹角不时听到狗叫。想起以前投到ZG网的诗“深巷柴门闻犬吠,旧柴新火袅暮炊。冬日沉沉积雪冷,夕阳只影等谁归”,编辑驳回说意境很好,格律还望斟酌。那时候还不服气,如今想来确是幼稚可笑了。我到底写不了盛唐的诗,仔细看看其实小时候填(zhuang)过的词(B)大都不合格律,少年不识愁滋味啊,笑笑了之了。去往祖坟的路上看到了一块碑“边下遗址”,想到老家新农村规划就要成为景点库区,老人们生活了一辈子的土地凝结了多少辛酸苦辣百感交集,我能体会到又体会不到。说能体会到是我小学三年级从镇上搬到县里,我的幼儿园时光,我的一半童年就无可追忆了。如今零星记得小时候上墙揭瓦飞檐走壁,在屋顶上暴走,在大树下挖沟,一脚踩进炉烟屋浑身黑灰哭。中学时也回去过,但是平房起了高楼,树被砍的无几,这些痕迹都没有了。如果此刻我不记录下来,等我更年期综合症、老年痴呆发作,她们就从这个世界上消失了,连一块像“边下遗址”一样简陋的碑都没有。想到了余光中的冷雨,“只是杏花春雨已不再,牧童遥指已不再,剑门细雨渭城轻尘也都已不再。然则他日思夜梦的那片土地,究竟在哪里呢?”在我的笔下,在我的文字里。老房子里还贴着不知多少年前的对联,我一点点刮掉一层后发现了八个字:“凤鸣盛世,龙有佳人”,回到家后查背后的故事却怎么也找不出典故,一番周折后才发现原来是“龙有传人”,不禁感概中华书法博大精深,恨我写不了一手好字,传不下古老的文明。在晦暗幽深的老房子里,于八个字中偏偏看错这一个,不由得你不多生联想,是天上要掉个林妹妹吧,我相信天意所为如是必有其深意。老屋小院梧桐挺拔,展现出旺盛生机。梧桐生矣,于彼朝阳?

年前恍然几日,诸事匆忙,还没来得及回高中母校看看。每次回家我是一定要去拜访的,没什么衣锦还乡的耀武扬威,仅仅为了感受古木盎然沧海桑田的一份厚重,以及于陈旧历史中焕发出的新时代少年求知求学天真纯洁的笑脸。母校始建于民国,由国民党时任昌乐县长张天佐创办,原名省立昌乐中学,培养出两名院士多位将军。张天佐其人,国民党员,官至山东保安第一师师长,如今对其批评贬斥,动辄言其**反人民。重庆谈判以来,有太多的故事湮没于内战风尘,但历史是公正的,于多少年后待到中华民族强大到足以抵挡任何流言蜚语,相信历史会以一个本来的面貌呈现给人民。但今天网上总有所谓公知大V等**妄议政治,借历史被遮掩的边边角角肆意发挥,掀起历史虚无主义。和平年代,舆论宣传就是战争一线。面对西方颜色革命和和平演变,必须坚持党管媒体、党管宣传、党管意识形态。对那些明明不懂历史却自以为很懂,明明初中文化非弄个博士文凭,借着有几个粉丝天天大放厥词的跳梁小丑必须口诛笔伐除之而后快。侠以武犯禁,儒以文乱法。犯禁可杀一人,乱法为祸朝纲。这种毁我长城的小人一日不除,历史真相如何能够昭昭。如今昌乐一中古木参天,郁郁苍苍,“翰苑”巍然屹立,见证共和国七十年风雨沧桑。如今不言功过对错,国民党员张天佐毕竟在昌乐做了一件大事,兴学开化,功在千秋。如今在这里求学的孩子们早丢下了上代人沉重的包袱,在他们明亮的眼眸中你发现岁月终究会激浊扬清,让逝者安息,让生者前行。

昨晚的春节晚会一派歌舞升平,赞祖国繁荣昌盛,喜人民安居乐业。我满怀着希望与憧憬咻两亿的红包,最终在希望的破灭声中迎来了新年的钟声。马云冒天下之大不韪,以天下人为猴而耍之,我等生而为人的尊严不甘被耍,只好忍痛割爱删之。所谓达则兼济天下,从道义上讲无论是悲天悯人还是聊表同情都值得尊敬,但以货殖为物绑架春节晚会就不能被原谅。网络上总有声音说央视春节晚会质量日下,甚至有他心份子借机贬低新闻联播,抵制央视。诚然在如今五彩缤纷的娱乐节目中春晚固不能调合众口,但也应该看到今日**言论自由,百家争鸣。三十年前文娱相对匮乏,春晚一枝独秀。三十年的改革开放,三十年的市场深化,我们欣喜三十年来春晚的泯然众矣,其实是祝贺祖国文化事业的繁荣开放。没看到经典重现荧屏确实是一大遗憾,86版《西游记》是跨越两代人的童年,我仍然清晰地记得放学回家迫不急待扔下书包打开电视的一幕,多少年以后,再没有什么事情让我如此期待。不疯魔不成活,向老一辈的表演艺术家们致敬。

这是旧历新年的第一天,愿新年的阳光照亮你的梦想。祝朋友们猴年大吉!

(2016-2-8 于家中)

2021新年贺词

以这种形式跨年殊有意义了。现在是2021年的第一个凌晨,我裹着大衣忍着困意写下这篇文章。

零点新年,听得见热闹

2020的冬天格外冷,五天前一场大病让我艰难爬升的体重复又跌落,几乎是一年来最严重的一次,恶寒重、发热轻、无汗、头痛、肢节酸疼,中医曰风寒束表。最近这两年,我大概可以在感冒将发未发的时候把它遏制住,唯独这一场,中午一觉起来就发烧了。其实万事万物都有预兆,你没有意识到罢了,就像这场感冒,明明前一天头疼,你却只以为睡眠不足,不止认知会造成偏见,自以为是也会蒙蔽你的双眼。我记得小时候上学,考试结束后经常会发烧,往往成绩不错,我视为不传之秘,小孩以为是招致天妒,至少从那时候起,我就在为每一件事做出解释,解释的不对是当时认知不够,不解释却是不能自立自强,这是个思维方式问题,保持探索,永不止步,这是一个男人成长的必经之路。

凌晨一点,陆陆续续还有人来往

人为什么会焦虑?不安于现状就会焦虑。2020是极不平凡的一年,这一年里蕴藏着巨大的商业机会。有的人做了公众号,有的人做了小程序,都没成功,也许流量生意才是最接近终点的方向,技术的尽头都是商业,天外有天技术无止境,技术不是目的。想想这场荒唐的风寒束表,许是天意吧,忙碌了一年不容易,未成一事,也收获颇多,放空自己完全停下来,多亏了这场大病。人还是需要休息的,连轴转会获得内心的充实,但充实未必是最优解。机器是反人性的,让人不反思、不交际、不休息,但人可以anti-coding。人性是万物根基。通人性才能做生意。太阳底下没有新鲜事,天下所有的生意都是信息差,很多时候未必要想法多么高妙,只需做在大多数同行前面就够了,举国之力也用了若干年才走上自主创新之路。况一人尔?武艺再高高不过天,资质再厚厚不过地,小子要知天高地厚。

凌晨两点,只听见内心的声音

古今而立,竟有几人立业?先成家无疑是最正确的决定。其实缘分到了无需多虑,冥冥中自有天意,只要去想,天地就会皆同力。2020以疫始,又以疫终,唯独中间的窗口期,让我了却此间大事。责任担在身上才知责任重大,未经磨难难成人,不担千斤不知千斤几何。小时候的一场冷雨多年来一直淅淅沥沥,“一位英雄,经得起多少次雨季?他的额头是水成岩削成还是火成岩?他的心底究竟有多厚的苔藓?”问了千百次的千呼万唤,诵了千百回的千回百转,如今有了答案。一重境界一重天,上了山,此生的追求就有了更具象的表达。

凌晨三点,万籁此俱寂

人很少了,多数人都进入梦乡了吧。为什么很难找到同类?智商高的人没朋友,情商高的人没敌人。很多时候都是一个人,甚至有时索性丢弃人情世故,肆无忌惮地做自己独自做的事。没有谁能够阻挡我,我关注你是因为我认为你值得我关注,你对我不构成威胁,就在你面前做个骛人何妨,连“藏”都懒了。这有违我的处世原则,我更渴望深潭大海,鱼龙扑腾都没有浪花,谁又真的希望茕茕孑立呢?谁不想和光同尘?谁不知道风必摧之?刀再锈也是刀,不是木头,也能伤人,得有鞘。大海难得,怕只有华山一条道了,我相信一定会见面的,那是你绕不过去的高山。见天地,见高山,这是第一等事,生意场上的事都不及他重要,别忘了,你是江湖上的人。

凌晨四点,蒙蒙竟有天将亮的错觉

该睡了。而立之人,熬夜伤身。夙兴夜寐天之道,要尊重规律。在信息透明的前提下,只要一直盯着某个领域,在别人抵达某个高度的同时,你也能达到。到死不相往来,西方有苏格拉底,东方还是有孔子,殊途能同归。2021有300多天,你会得到你要得到的。

晚安凌晨四点钟的北京。为新年贺。

@loxin
2021.01.01 04:30

从奴主道德角度看**传统文化塑造的民族性格

中华文明数千年绵延不断,传统文化根植于祖国大地山川,历史几度兴替,王朝数代更迭,在这片广袤土地上,文明之火生生不息,家国情怀代代相传,以儒家学说为核心的传统文化不断充实、丰富,形成了中华民族独有的文化体系,塑造了根深蒂固的民族性格。随着外部环境的变化,这种民族性格有其适应当下的一面,也有其不适应的一面,今天我们谈扬弃,更应该关心传统文化驱使下的底层内涵,知其所以扬弃。本文从德国哲学家尼采奴主道德说角度,对传统文化影响下的民族性格做一大旨概述,求窥传统文化之冰山一角。
—— 序

一、奴主道德说

奴主道德是尼采提出的哲学概念,在《善恶的彼岸》中最先阐述,后在《道德谱系学》一书中得到最大的发挥。尼采认为,最基本的道德形态有两种——“主人道德”和“奴隶道德”。主人道德把行为放进“好”与“坏”的标准之中,而奴隶道德把行为放进“善”与“恶”。主人道德的主要特征是:自我肯定、充满信心、骄傲、主动。遵循主人道德的人把自己视为价值的决定者,因此他不需要得到认可,他断定:“凡是对我有害的,其本身就是有害的”,他认为完全是自己赋予事物荣誉,他是价值的创造者,尊重自己内心承认的一切。而奴隶道德的特征则是:自我否定、谦卑、反动、怜悯,其实质是功利主义道德。奴隶道德的思维方式认为,善人不管怎样都必须是稳妥可靠的人,必须是性情温和的、容易受骗的、或许有点儿傻的老好人,在奴隶道德占优势的地方,无论何处,语言都显示出使“善”和“傻”这两个字眼的意思相互接近的倾向。

尼采提倡主人道德中健全的生命本能、充沛的强力意志、独特的自我、蓬勃的创造精神,谴责主人道德中的善,认为它不仅不恰当,而且是罪恶的,容易引起人的恐怖感。同样,他在否定奴隶道德中的病弱、怯懦、守旧、怨恨的同时,也认为奴隶道德中的精神力是值得学习的。一切较为高级的混合文明都试图调和这两种道德,但更为常见的是,两者的混淆和相互误解,而且有时会难分难解地并列在一起——甚至在一个人身上,在同一个灵魂内部。如果仅从一个人的外在性格观照,那么主人道德的基本特征是坚强而独立,相反,奴隶道德的性格面貌则是懦弱而从俗。尼采认为,一个人是被哪种道德主宰不是由他的身份地位决定的,而是由他的行为中蕴含的心态。一个大**者也可能属于奴隶道德控制,因为他的所作所为可能是由怨恨与报复心所推动。遵循主人道德的人就是主人,遵循奴隶道德的人就是奴隶。

二、传统文化孕育的民族性格

**传统文化是建立在儒家学说的完善和巩固之上的,几千年的封建社会,所传授的不外传统的责任**、节制**和忠孝**,都是儒家学说与封建**结合的产物,可以说,儒家**是连同我们当代在内的主流**。儒家**注重道德、礼教、仁义,要求自觉遵从真和善,重经验,认为自然秩序是人类理性的根源,不倡导虚无缥缈的神,是典型的人文主义,贯穿封建**的大部分时期,对社会安定、平衡起到了积极作用。事物有利必有弊,高度统一的儒家**也有其弊端,过分强调继承前人传统,不要有新的创造,箝制了人们的**,尊重权威,反对自我表现,压抑了人的个性。尤其在清末民初,封建专制发展到顶峰,世界格局激变,传统文化不适应的一面被放大,在一定程度上造成**近代落后局面。直到今天,传统**在国民意识形态中仍占据不可替代的地位,传统文化是烙印在**人骨子中的底色,我们的行为会不知不觉以传统文化儒家规范为准则,受到道德文化的约束,可以说传统文化塑造了民族性格,并且一直以来都在产生持续影响。

观察社会依次有三个层面,技术、制度和文化,其中又以文化为最深层、最稳固,一切社会现象皆可从文化的维度分析解读,儒家过于强调道德,起到巩固**的积极作用的同时必然也带来负面影响,恰恰是消极的这一面,塑造了弱势的社会民族性格,即不尊重客观规律,迷信外力作用,缺乏自主的出发点,在思维方式上表现为个人利益驱动,好贪小便宜;在行为方式上表现为好吃懒做,不思进取,渴望靠外部力量救赎;在形象面貌上表现为缺乏自信,畏惧权威,没底气参与公平竞争。道家认为“圣人之利天下也少而害天下也多”,旗帜鲜明地反对道德,正是因为认识到道德只能防小恶,而不能防大恶,就像把财宝收在箱子里,只能防毛贼,却反而方便了大盗搬运。圣人道德的消极面正是尼采认为的奴隶道德,奴隶道德产生弱势的民族性格,弱势的民族性格阻挡国人的向上一路,于是百姓迷信皇权、救主、神仙,文化部改变,奴隶道德不改变,民族性格不改变,社会生产力再进步,百姓也不过是换了一种寄托物。

非有重大变革引起社会**大解放,文化不足以自发发生改变,从这个角度上看,五四运动的伟大贡献在于极大地解放了**百姓等待“皇帝”“上帝”救赎的**,在于增强了**人民反帝反封建的决心和觉悟,在于促进了全国人民对改造**问题的反思和探索,也因此,**的民族性格开始从弱势向强势转变,数千年奴隶道德**的国人深入骨髓的认知城墙开始崩摧,所以五四运动是一个分水岭。五四以前,奴隶道德影响的弱势民族性格占主流地位,小农经济落后的生产力,决定了封建国家必须集中专制,而高度的集中与专制要求**高度统一,就必然要全盘灌输忠君爱国、敬天法祖的**观念,必须钳制文化的自由生长,封建皇权的强制力量在文化管控中发挥得淋漓尽致,从焚书坑儒,到罢黜百家,再到科举八股,从强制先于道德,到道德本身就是强制,逐步形成了文化专制,儒家文化成为**者的工具,道德成为社会行为准则,被**者本质的软弱和对“善”的寄托,使他们主动忘记了被压迫的事实,先是服从了压迫,然后压迫变为习惯,再然后成为了社会本能,于是奴隶道德成为民族性格。而五四运动以后,以**共产党人为代表的先进分子,开始了民族解放、自立自强的艰难探索,推翻帝国主义、封建主义、官僚资本主义三座大山,在社会**上犹如惊雷炸响,堪比开天辟地,将积弱的民族性格破格提振,从抗日战争到解放战争,从新**成立到改革开放,再到新时代**特色社会主义,一代代**共产党人浴血奋斗、艰苦创业、拼搏进取,取得了举世瞩目的成就,**人民站起来了,这是主人道德引领的强势民族性格在中华大地上第一次生动实践。

三、主人道德塑造民族性格的现实意义

当今社会,各行各业竞争比以往任何时代都更加强烈,与竞争型社会相适应的必然是主人道德产生的强势民族性格,唯有尊重规律,自立自强,才能激发经济活力,推动社会发展。但受文化惯性的影响,直到今天,奴隶道德在国民心中仍盘桓不去,民族崛起呼唤的强势民族性格仍未占据主流地位。在家靠父母,出门靠朋友,就是不靠自己,遇事求神问道,见难心生退却,典型的奴隶道德弱势性格仍然大有市场。纵揽当下,不怕挫折、愈挫愈勇的人往往能创业成功,喜欢占小便宜、紧盯着眼前利益的人即使委以重任也难成大器,推崇狼性文化的企业往往能抓住机遇、高速发展,固守现状或者频繁转换赛道的公司都很难做大做强,分析不难发现,无论是商业还是事业的成败兴衰都取决于文化。到了全面丢弃传统文化中与社会生产力发展不相适应的奴隶道德的时候了!《国际歌》早就昭示我们,从来就没有什么救世主,也不靠神仙皇帝,要创造人类的幸福,全靠我们自己!

Nightmare api 中文

nightmare 的 API 不是特别的多,平常使用比较多的主要是配置 nightmare 以及与页面交互的相关API,这里是官方给出的 nightmare 文档可以参考学习。

相关配置 API

API 描述
Nightmare(options) 初始化实例,options 为设置 Electron 浏览窗口的配置,参考文档
waitTimeout (default: 30s) wait 等待最长时间,超过这个时间还未返回,则抛出异常
paths 为 Electron 设置数据路径,参考文档
switches chrome 的一些配置,参考文档

以上的 API 均为 nightmare 初始化实例对象的配置,例如我们要配置浏览窗口的大小,如下所示:

var nightmare = new Nightmare({
    width: 1000,
    height: 800
    show: true
});

与页面交互API

API 描述
.goto(url) 加载 url 页面
.back() 后退到前一页
.forward() 前进到下一页
.refresh() 刷新当前页
.click(selector) 点击selector元素
.mousedown(selector) 鼠标按下selector元素
.type(selector [, text]) 如果有text参数,则向 selector 输入 text,否则清空 selector , 并触发键盘事件
.insert(selector [, text]) 与type功能一致,但是不触发键盘事件,输入速度快于.type
.check(selector) 选中 selector checkbox
.uncheck(selector) 取消选中 selector checkbox
.select(selector,option) 选中 dropdown 的option选项
.scrollTo(top, left) 屏幕滚动
.viewport(width, height) 调整视窗大小
.inject(type, file) 注入本地的 js、css 文件
.evaluate(fn[, arg1, arg2]) 在页面中执行fn
.wait(ms selector
.exists(selector) selector 是否存在
.visible(selector) selector 是否是可见的
.on(event, callback) 捕获页面上的事件
.title() 返回当前页面的title
.url() 返回当前页面的url
.screenshot() 截图

上面的 API 都是与页面之间进行交互,其中有几个方法比较特别,将进一步对其介绍。

  • nightmare 的 .evaluate() 方法

evaluate(fn[, arg1, arg2 …]) 方法是在浏览器端执行 fn 函数,因此对 dom 节点的一些读写操作要使用 evaluate() 方法才行。

var Nightmare = require('nightmare');
var nightmare = new Nightmare({ show: true });
var content;
nightmare
     .goto('https://example.com')
     .evaluate(function(selector){
          return document.querySelector(selector).textContent; // 返回dom节点信息
     }, '.head')
     .then(function(res) {
          console.log(res); // 打印返回的节点信息
     });

要注意以下几点: 首先,evaluate() 方法是在浏览器端执行 fn 函数,也就是说 fn 函数的执行环境是浏览器环境,而不是 node 环境,因此一些浏览器不支持的 ES6 特性,在 fn 函数中不要使用 其次,浏览器中的dom信息只能通过fn的返回值来获得,而提供给fn使用的数据只能通过参数传递,也就是说不要使用全局变量的方式进行数据传递

例如:

var Nightmare = require('nightmare'),
    nightmare = new Nightmare({ show: true }),
    content,                // A
    selector = '.head';     // B

nightmare
     .goto('https://example.com')
     .evaluate(function(selector) {
          let msg = 'test'; // 浏览器不支持的特性, 错误
          content = document.querySelector(selector).textContent; // 使用 A, B 处定义的变量,错误
     })
     .then();

关于evaluate() 的坑

  • nightmare 的 .wait() 方法

wait() 方法的作用是等待某个事件发生,这些事件包括:一段时间结束、等待某个dom元素出现、等待某个函数执行完成。wait(fn) 方法与 evaluate(fn) 方法类似,fn 也是要在浏览器上执行,但是最后要返回 true 才能结束等待,最长的等待时间为 waitTimeout 设置的时长。

var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });

nightmare
    .goto('https://baidu.com')
    .wait(function() {
        // 在 baidu 的页面中绑定一个 dom 节点
        var ndTest = document.createElement('p');
        ndTest.innerHTML = 'This is test for nightmare\'s wait';
        ndTest.className = 'test';
        document.body.appendChild(ndTest);
        return true;
    })
    .wait('.test')
    .evaluate(function() {
        // 返回节点文本信息
        return document.querySelector('.test').textContent;
    })
    .then(function(res) {
        console.log(res);
    });
  • nightmare 的 .insert() 与 .type() 方法

两者都能向 web 页面的输入框输入信息,但是存在着一些差别。type() 再输入过程中触发键盘事件,而 insert() 不触发键盘事件,但是insert() 输入的速度要快一些。因此如果输入框要响应键盘输入的事件,这时就要 type()了。

  • 总结

主要介绍 nightmare 的 API,nightmare 的配置参数主要分为三个方面:Electron 配置参数(nightmare 的底层是 Electron 框架)、Chrome 配置参数(Electron 使用了 Chrome 浏览器)以及自身的配置。nightmare 与外面的交互 API 可以分为两类:其一,操作类 API 如 wait、click、evaluate 等;其二,输出结果 API 如 title、exists 等。使用时最值得注意的就是 evaluate(),很容易出错。

凡是过往,皆为序章

傍晚,虎头山,不远处是电视塔流光溢彩的灯柱,山下是滚滚不息的车流,山中古树飨尽众生香火,人间百态汇成漫天星河,斑驳的树影,古朴的飞檐,在过去与未来的光影交错中,新年的钟声即将响起。2018发生了很多故事,有所见,有所得,有所思,是非成败转头空,都是序章。

为众人抱薪者, 不可使其扼于风雪。

天底下的事,能力越大就责任越大,责任越大意味着来自公德私德的压力就越大。今日世界日月变换风云激荡,互联网全方位融入社会生活曰变革之深如惊雷乍起不啻四十年前,谁也不敢妄言未来,人人都是摸石头。摸石头就会摸到雷。摸到雷会被炸死。不摸就过不了河。最可能改变世界的是公共服务,其中最难的是做平台,人间百态众口难调,佛且不度众生,人力何为哉?熊林,打通房主与年轻人的最后一公里。程维,改变了人们的出行方式。他们干的是前所未有之事,他们摸到了雷,他们受到来自四面八方的指责怒骂和落井下石。但是如果他们退缩,初涉社会的青年就会为租房而绝望奔忙,我们就回到了招手拦出租车的时代。他们下地狱,他们度众生。

众生有罪,你我皆是同谋。

当一恶行链条足够长,每一环节执行者看似正常的行为都可能促成最终的犯罪。凡人容易分辨是非,却很难不为恶,是谓恶之平庸。所以公交悲剧酿成之前,全车都在旁观。所以抵制DG不出半月,就有人忘了耻辱。魏则西去世两年后又有周洋,萨德被人遗忘后乐天玛特才退出**。几千年泱泱文明有大智慧,经世致用能出将入相,可千百年来有几人无私无畏,众生芸芸只学会明哲保身。雪崩中,没有一片雪花觉得自己有责任。在娱乐至上、消费捆绑、流量为王见怪不怪的时代,不伸张正义就是在助纣为虐。谁来制约人性的恶?密宗有必杀的慈悲,为救世而造杀业,能杀生成佛。有道是乱世用重典,那和平盛世用什么?

是进亦忧,退亦忧。

如果人类社会回溯一个形态,在西方民法典和道德律尚未成型之前,**就有了侠。侠是江湖之远的秩序,是庙堂之外的风骨,影响了五千年来一代代**人的精神世界。孰能冒死揭露阴暗,谁替弱者仗义执言?谁赤胆忠肝为天地立心,谁登高一呼为生民立命?有兽爷剑指长生,有丁香刀向权健,有花总棒打酒店,**从来都不缺敢怒敢言的人。当下新媒体技术突飞猛进渗透到社会生活的方方面面甚至改变了人们的思维方式,时间碎片化、渠道扁平化、内容同质化,人人自可发声,轻易即能传播,个体影响社会的力量从未如今天这般深刻而强大,舆论对社会的导向性作用从未如今天这般深远而广泛。然手握利剑,何时而乐耶?

岁月不饶人,我亦未曾饶过岁月。

做一件事难,做成一件事何其难。区区百年,时随势转,一个人成就高低尚在其次,但有所执就不负此生。今年来,几位传奇相继离世,留给后人一片嗟叹,有恩仇必报的狂生李敖,有悲天悯人的大侠金庸,有为国铸盾的隐士程开甲,有刚直不阿的判官二月河。年少偏执一事,到死不改初心,写小说能自成一派,造核弹终威震西方,他们音容笑貌皆成风格,他们谈论风生都是文章,他们此心光明争日月,他们功名可以昭千秋。一生漫长,高山仰止,有多少梦想就有多少峰回路转,有多少信念就有多少无畏前行,再平凡的努力都不容轻视,再细微的坚持都该当尊崇,见过四点钟的星空才知道天高地厚,读遍半人高的资料才知道成功不易。再平凡的人都有故事,再浅白的岁月都值得写成书。

愿清晨的阳光照亮你的梦想,愿一场雪涤净人间阴霾,愿所有的努力都不被辜负,愿你所想就有所成。天色渐晚,城中灯火明灭,寺内升起炊烟,新年将至。

(2018-12-31 八大处)

2017新年贺词

窗外西风呼啸,远处山峦蛇行,寒气从塞北破关而来。又是一年冬季,又是一片凉败凄萧。至今还没有下雪,但是天气仍旧越来越冷,白杨一天天凋落着最后的生机,冬青都显现颓势。其实万物都在生长,当白杨枯了又绿,你就能发现岁月留下的痕迹。入冬以来,我开始思考无限和永恒。

今天是西元2016年的最后一天。庚子月,丁亥日,冲蛇煞西。黄历上说宜祭祀,忌行丧。

我的人生哲学是示弱。我一眼看穿那些外强中干的人,他们在我面前张牙舞爪我会报之以微笑。我观察周围的每一个人,我发现一个人内心越脆弱,他对人事就越强硬,因为他渴望被认可,他哗众取宠因为他害怕孤独,他用这种方式保护他自己。北风越来越冷了,草木渐渐枯零,我慢慢相信人本身是阴阳调和的,老祖宗能讲出中庸两字自然有万万年的道理。当一个人足够坚强了他就能柔和地对待外物,他会维护自卑者的尊严,也会削弱恃强者的威风,他可以赐予你权柄帮助你登上高峰,也可以纵容你驰骋引导你跌落悬崖。他比弱者弱,比强者强。冬至早就过了,依北方的规矩,现在是一九,当然不可能没下过雪,只是还没落下来就化了。人总有眼见为实的偏见,你看不到积雪就以为没下雪。但你在每一件事中都能看见他的身影,他很少干涉是非,他一直很从容地旁观事态发展,他大概是在思考何时需要熄灭了炉火或者加一把干柴。因为他想要变得更强。

我一年没有动笔写字。在白杨还蓬勃旺盛的时候我萌生过写一本小说的念头,提纲都写好了。但是当白杨开始落叶时,我就把它扔掉了。后来我想人只能在适度忙碌的环境里激发潜能,只有你身边充斥着无聊的琐事你才格外珍惜时间,也才会做你真正想做的事,也许正是这样才让你更接近你想要的成功。当白杨叶子落尽,我开始陷入一种无所事事的恐慌。从某种意义上说我更渴望年轻时经历更多的坎坷,以丰富人生阅历,从而获得一种解决复杂问题的能力。于是我不停地读书,在下雪之前我读了33本书。我孤身独处,虽然我从来并不孤独,我独自生活在稠密的**之中。我透过纸张跟天人对话,以伺在书中体悟艰苦卓绝,窥探别人的一生。我因此有些狂妄,而无限和永恒也许就喜欢我这样的人。但有时候书读多了会徒增烦恼,我常常从梦中醒来,不知冬夏不辨春秋,仿佛昨夜还仗剑任侠壮游天下,今世已戎马金戈一身倥偬。谁梦到蝴蝶化作庄周,又谁身在行伍心在江湖。醒来后我才发觉,33本书中都没有我期冀的能量。天色越来越晚了,我不会埋怨大地的热力杀死了雪花,我也不会怜惜白白辜负了时间,我只是痛恨除此之外我再也想不到用何样的方式增进智慧。于是我患得患失。

每年的这个时候我会回忆。回忆最好的朋友是酒,现在我已煮上了酒,酒花开始沸腾。煮过的酒不醉人,但是往往喝醉人的都是不醉人的酒。也许我不该生这炉火,可是生了又如何呢?一壶烧酒甘醇,眼前看不见了是非对错,心中就有了万古千秋。四年前的北京跟今天的北京并没有本质的不同,但是比起八十年前一定有天差地别。八十年前黄埔生三个月出师能驱除鞑虏,若此时你有机会回到三国是否能够一统山河。烧酒在胃里酝酿,你的胸口开始发烫。玻璃上的窗花绽放好像烈日炙烤大地,大概是今年最热的时候你从卢沟桥来到了这个叫做南口的北方小镇。山,山,山,西面环山,北面环山,南面环山,窗外西风呼啸,塞北的寒气直逼居庸关!那一年还没到冬季,就一片凉败凄萧。白天红日,**如火,三月亡华。血染的古长城,浩荡的十三军。你不知是醉是醒,不知今夕何夕,洒一碗清汤,祭祀。你推开门,举杯北奠居庸关。西风呼啸,山峦蛇行,你关上门,就关上了一个时代。酒醒了你就知道,人这一辈子,有的人活成了面子,有的人活成了里子,都是时势使然。时势造英雄,谁来造时势?

这几日有烟花绽放,有时候我会登上门楼,然后我就目睹了满天的森罗棋布,物换星移,高处不胜寒。这是我在北京度过的第五个新年,在此之前我从不相信北京有如此肆虐的星空。天就该下雪了,朋友们,2017新年快乐!

(2016-12-31 于南口)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.