zoukankan      html  css  js  c++  java
  • Casperjs初体验

    Casperjs是一个基于PhantomJS和SlimerJS的前端端对端测试框架,当然你也可以使用它完成网络爬虫功能,它的特点的通过简单的脚本模拟浏览器行为。

    安装

    casperjs的安装很简单,你可以通过npm或者下载casperjs包自行引用的方式安装,毫无疑问其支持Mac、windows、linux。

    • npm全局安装
      npm install -g casperjs
    • Mac os推荐使用brew
      $ brew update
      
      $ brew install casperjs --devel
      
      $ brew install casperjs
      
      //更新casperjs
      $ brew upgrade casperjs
    • 察看版本
      $ phantomjs --version
      $ casperjs
    •  

      使用

      通过以上步骤成功安装好casperjs后,可以运行以下脚本,对casperjs进行自检,熟悉其功能

      $ casperjs selftest

      以一个简单的百度图片热门榜的操作为例,简单示意一下casperjs的基本用法

      注意:以上代码可以因为百度图片的DOM变化而失效,读者可以自己修改一下代码中的选择器

      1.首先新建两个文件index.js 和config.js

      2.把以下代码复制进index.js

      var config = require('config');
      var casper = require('casper').create();
      
      //输出配置
      casper.echo('using config:');
      casper.echo(JSON.stringify(config, null, '	'));
      //屏蔽google资源,你懂的
      casper.on('resource.requested', function(requestData, request) {
          if (///.*google[^/]+/.test(requestData.url) || /cloud.githubusercontent.com/.test(requestData.url)) {
              request.abort();
          };
      });
      //输出console页面错误
      casper.on('page.error', function(msg) {
          this.echo('error message caught: ' + msg);
      });
      //设置浏览器超时时间和窗口大小
      casper.options.waitTimeout = 10000;
      casper.options.viewportSize = {
           1024,
          height: 768
      };
      
      //生成一个数组
      function Nums(len) {
          var nums = [];
          for (var i = 0; i < len; i++) {
              nums.push(i);
          }
          return nums;
      
      }
      //记录时间日期
      var date = new Date();
      var casperDate = date.toLocaleString().split(' ')[0];
      
      //定义nums数组作为遍历长度,suglineVal是热门榜值,suglineLength是热门榜长度
      var nums,suglineVal, suglineLength;
      var date =new Date();
      //开始casper,输出当前日期,并通过config文件读取url
      casper.echo(casperDate+'百度图片热门搜索图片抓取');
      casper.start(config.baseURL, function() {
          //获取热门榜长度
          suglineLength = this.evaluate(function() {
              var csuglineLength = $('.sugline').length;
              return csuglineLength;
          });
          //生成遍历数组
          nums = Nums(suglineLength);
          //casper的each函数对每一条热门搜索执行相同结果
          this.each(nums, function(self, num) {
              //then函数控制执行流程,获取热门榜的热门搜索值,并赋予百度搜索框进行搜索
              self.then(function() {
                  suglineVal = this.evaluate(function(num) {
                      //获取热门搜索值,选择器随时可能会改变,请参考运行时百度图片首页的DOM树
                      var cSuglineVal = $('.sugline')[num].children[1].innerText;
                      //__utils__功能等同与jquery,方便在没有引入jquery或者类似DOM查询工具时使用。
                      __utils__.setFieldValue("input[id='kw']", cSuglineVal);
                      $('.s_btn')[0].click();
                      return cSuglineVal;
                  }, num);
              });
              //waitUntilVisible等待一个选择器出现,等到imglist加载完成后进入
              self.waitUntilVisible('.imglist', function() {
                  //capture函数对当前页面进行截图并保存在capture/images/...
                  this.capture('capture/images/'+casperDate+'/'+casperDate+'-' + suglineVal + '.png');
                  //在控制台输出热门图片
                  this.echo(suglineVal);
              });
      
          });
      });
      //运行casper脚本start
      casper.run();
      

        

      3.把以下代码复制进config.js

      'use strict'
      //casper读取系统信息的模块
      var system = require('system');
      //读取环境变量
      var env = system.env.TEST_ENV || 'test'
      var config = {};
      //其实上面没什么用,主要配置看这里
      config.test = {
          baseURL: 'http://image.baidu.com/',
          imageURL: 'capture/',
      }
      
      module.exports = config[env]
      

        

      4.在控制台中执行,如果出现casperjs不是内部命令,请确保全局安装casperjs,确保环境变量正确。

      casperjs index.js

      结果

      1.控制台输出如下

      2.查看images文件夹成功截取图片

  • 相关阅读:
    Python--文件操作
    Python--数据类型整理
    u-boot之NAND启动与NOR启动的区别
    u-boot之make all执行过程分析
    编译过程和符号表重定位问题、静态和动态链接
    u-boot之make <board_name>_config执行过程分析
    u-boot之ARM920T的start.S分析
    在使用Myeclipse时,用Tomcat添加部署项目的时候报错,或启动tomcat报错
    关于JDK,tomcat,eclipse的配置
    我的博客
  • 原文地址:https://www.cnblogs.com/dreammyone/p/6994625.html
Copyright © 2011-2022 走看看