简单试了一下 CasperJS ,基于PhantomJS / SlimerJS 引擎。
可以不搞图形窗口出来就网页截图,非常方便,值得一用。
示例集合:tests/suites/casper
写个小demo练手,把指定歌曲批量加入百度音乐收藏:baidu_music
Windows下安装过程
casperjs
在http://casperjs.org/下载zip文档,解压,假设目标目录为
d:\dev\casperjs
把d:\dev\casperjs\bin
加入PATH
环境变量
phantomjs
在http://phantomjs.org/下载zip文档,解压,假设目标目录为
d:\dev\phantomjs
把d:\dev\phantomjs
加入PATH
环境变量
slimerjs
在http://slimerjs.org/下载zip文档(standalone版本),解压,假设目标目录为
d:\dev\slimerjs
把d:\dev\slimerjs
加入PATH
环境变量
新增一个环境变量SLIMERDIR
,取值为d:\dev\slimerjs
新增-个环境变量SLIMERJSLAUNCHER
,取值为d:\dev\slimerjs\xulrunner\xulrunner.exe
如果提示Couldn’t read application.ini
,参考:Making casperjs work with slimerjs on Windows
把 d:\dev\slimerjs\slimerjs.bat 中的 SET SLIMERDIR=%~dp0
改成
if not exist %SLIMERDIR% (
SET SLIMERDIR=%~dp0
)
目前发现的问题
网页内容比较长的时候,windows下有时会crash掉
casperjs取https内容,或 post到https的表单失败
windows下参考issue-49
可以试试casperjs --ignore-ssl-errors=yes code.js
或casperjs --ssl-protocol=any code.js
以登录百度为例
以查找百度音乐为例
以收藏百度音乐为例
支持指定FRAME点击其中的元素
这个参考github上官方给的例子就行了 tests/suites/casper/frames.js
不像perl的Win32::IEAutomation,点击frame里面的 yyy 总是失败,哎。。。
特定event出现时的处理
看官方介绍 Hook in the deep using events,包括各种触发事件,例如mousemove,弹alert,page载入完毕等等
打印变量详情
require('utils').dump(x);
载入JQquery或其他本地JS
远程DOM能用:casper.page.injectJs('/path/to/jquery.js');
casperjs run着就一直能用:
设置Referer
设置默认等待时间
设置默认视窗大小
等某个元素出现再执行
预先检查url地址,决定是否访问
读入数组,按序执行
windows下提示ssl错误
添加命令行参数
--ignore-ssl-errors=true --ssl-protocol=any --web-security=no