JS工具:phantomjs casperjs

前端之家收集整理的这篇文章主要介绍了JS工具:phantomjs casperjs前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

page.evaluate(fn,[param])

对于page打开的页面,往往需要与其进行一些交互。 page.evaluate()提供了在page打开页面的上下文(下文直接用page上下文指代)执行function的功能(类比Chrome开发者工具的控制台)。如下例:

page.open('http://m.bing.com',function(status) {
    var title = page.evaluate(function(s) {
        return document.querySelector(s).innerText;
    },'title');
    console.log(title);
    phantom.exit();
});

在这个例子中, page.evaluate()接受两个参数,第一个是必需的,表示需要在page上下文运行的函数 fn;第二个是可选的,表示需要传给 fn的参数 param。 fn允许有一个返回值return,并且此返回值最终作为 page.evaluate()的返回值。这边对于刚刚命名的 param和return有一些额外的说明和注意事项。对于整个phantom进程而言, page.evaluate()是跑在一个沙盒中, fn无法访问一切phantom域中的变量;同样 page.evaluate()方法外部也不应该尝试访问page上下文中的内容。那么如果两个作用域需要交换一些数据,只能依靠 param和 return。不过限制很大, param和 return必须为能够转化为JSON字符串,换言之,只能是基本数据类型或者简单对象,像DOM 节点、$对象、function、闭包等就无能为力了。

这个方法是同步的,如果执行的内容对后续操作不具备前置性,可以尝试异步方法以提高性能:page.evaluateAsync()。

var test = 0;
  this.echo(this.evaluate(login),'ERROR');
  function login() {
    $('#username').val('idream');
    $('#password').val('zbw2202');
    $('.btn-submit')[0].click();
    test ++;
    return test;
  }

以上this.echo输出 null,即 输入this.evaluate内部的 function 是与世隔绝的。(另一个进程?)

猜你在找的程序笔记相关文章