标签: casperjs

casper.js中的setInterval和this.wait

我需要在每次迭代之间进行3次和2次循环.我试过这3个选项:

选项1

var casper = require('casper').create({
    verbose: false,
    logLevel: 'debug'
});

casper.start("http://google.com");

casper.on('remote.message', function(msg) {
    this.echo('remote message caught: ' + msg);
})

casper.thenEvaluate(function() {
    var x = 0;
    var intervalID = setInterval(function () {

       console.log("Using setInternal " + x);

       if (++x === 3) {
           window.clearInterval(intervalID);
       }
    }, 2000);

});

casper.run();
Run Code Online (Sandbox Code Playgroud)

观察:没有出现因为剧本在第一次setInterval被调用之前立即结束.

选项2

替换thenEvaluate()then()下面

for (i=0; i<3; i++) {
    this.wait(2000);
    this.echo('Using this.wait ' + i);
}
Run Code Online (Sandbox Code Playgroud)

观察:它立即输出3次,然后等待很长时间,因为this.wait()是异步.这不是我想要的,因为我想在两者之间延迟. …

javascript webkit qtwebkit phantomjs casperjs

5
推荐指数
1
解决办法
2万
查看次数

检查/记录PhantomJS/CasperJS使用的带宽

是否可以检查/记录每次运行PhantomJs/CasperJS时传输的数据量?

Phantom/Casper的每个实例都有一个instance_id分配给它(通过旋转实例的PHP函数).运行完成后,传输的数据量instance_id必须通过生成实例的PHP函数插入MySQL数据库.这样就可以记录各个phantomjs运行的带宽利用率.

可以运行许多幻像/ casper实例,每个实例持续一两分钟.

javascript screen-scraping web-scraping phantomjs casperjs

5
推荐指数
1
解决办法
686
查看次数

casper.js:在ExtJs输入字段中按"enter"键

我在页面上有一个ExtJs文本字段.我在casper.js中填充了一些值,工作正常.
然后我想要关注这个字段并按下Enter键,因为<form>它周围没有提交.

我试过的是:

casper.then(function() {
  // the text field is filled with the string
  this.sendKeys('#searchfield', 'some text');

  this.evaluate(function() {
    // this does not put the field in focus        
    document.querySelector('#searchfield').focus();

    // so 'pressing' enter has no effect at all
    var evt = document.createEvent('KeyboardEvent');
    evt.initKeyboardEvent('keypress', true, true, window, 0, 0, 0, 0, 0, 13);
    document.dispatchEvent(evt);
  });
});
Run Code Online (Sandbox Code Playgroud)

你知道怎么做到这一点吗?

javascript forms keypress extjs2 casperjs

5
推荐指数
1
解决办法
3123
查看次数

casperjs:评估document.querySelector返回null

我正在使用CasperJS中的waitForSelector()captureSelector()方法等待并使用CSS选择器选择一个元素,然后保存它的截图.

但是,我发现因为css background已设置为transparent,屏幕截图结果非常难看,所以我想设置backgroundwhite.我确信,我使用document.querySelector评估()调用,但似乎并没有工作.

这是我的脚本(您之前可以忽略所有内容casper.start(...,我只是包含了下一个代码片段的上下文的开头部分):

var casper = require("casper").create({
  verbose: true,
  clientScripts: ["libs/jquery-1.10.2.js"]
});
var utils = require("utils");

var requiredOptions = [ 'url', 'selector', 'filename' ];
var missingOptions = new Array();

for (var i = 0 ; i < requiredOptions.length ; i++) {
  var opt =  requiredOptions[i];
  if (!casper.cli.has(opt)) {
    missingOptions.push(opt);
  }
}

if (missingOptions.length > 0) {
  casper.die("\nMissing the following CLI …
Run Code Online (Sandbox Code Playgroud)

javascript dom evaluate phantomjs casperjs

5
推荐指数
1
解决办法
1万
查看次数

CasperJS没有跟随重定向到HTTPS

我正在尝试使用CasperJS来自动化大量繁琐的数据输入.具体来说,要在佳能网站上注册一大批相机设备.

我有处理表单填充的代码,使用CasperJS浏览网页时没有问题,但我无法让CasperJS导航到登录页面.

这是我到目前为止所拥有的:

var casper = require('casper').create({
    verbose: true,
    userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
    logLevel: "debug"
});

phantom.cookiesEnabled = true;

casper.start();

casper.thenOpen('https://b2cweb.usa.canon.com/b2cweb/view/myAccountHome.jsf?LOGINACTION=Y', function(response) {
require('utils').dump(response);
});

casper.run();
Run Code Online (Sandbox Code Playgroud)

注意:上面的代码一旦到达页面就转储标题内容.我还尝试了不同的用户代理字符串,以防Adobe主动阻止抓取工具.

该链接在Google Chrome中完美运行,但CasperJS只记录以下内容.

加载资源失败,状态=失败

从Google Dev Tools看来链接302重定向到

https://b2cweb.usa.canon.com/b2cweb/view/myAccountHome.jsf?LOGINACTION=Y

然后301重定向到:

https://b2cweb.usa.canon.com/b2cweb/view/login.jsf?TYPE=33554432&REALMOID=06-979697ef-63e3-49da-a97f-795f9d794fcc&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=-SM-EA3lbvOPfpMVWEZ5fDNhRBdvP75YFZ%2fmmFcIOEdxcmO9f3eSAXAISOKvl7eaVyQm&TARGET=- SM-HTTP%3A%2F%2fb2cweb%2eusa%2ecanon%2ecom%2fb2cweb%2fview%2fmyAccountHome%2ejsf%3fLOGINACTION%3DY

我假设重定向是CasperJS无法获取登录页面的原因.

是否有可能使CasperJS遵循这些类型的重定向?可以使用CasperJS通过HTTPS浏览和/或登录吗?

更新:

我不太确定它是否是导致问题的重定向.

作为一种解决方法,我尝试预先将会话cookie(从chrome复制)预加载到casperjs中,然后直接导航到帐户页面.

我还尝试在命令中添加--ignore-ssl-errors = true标志但没有成功.

无论我做什么,它都会返回一个about:blank url.

https redirect casperjs

5
推荐指数
1
解决办法
5010
查看次数

CasperJS文件在30秒后下载时间

我正在使用CasperJS下载15 MB的文件.在浏览器中,下载大约需要3分钟才能完成.使用Casper,.download相同url 的函数在30秒后返回,并且写入磁盘的文件为0字节.我已经尝试设置更长的超时时间:

var casper = require("casper").create({
    pageSettings: {
        webSecurityEnabled: false
    },
    waitTimeout: 500000,
    stepTimeout: 500000
});
Run Code Online (Sandbox Code Playgroud)

但它们没有效果.这是我的下载功能:

casper.on('resource.received', function (resource) {
    var url, file;
    if ((resource.url.indexOf("myDownloadUniqueString=") !== -1) ) {
        this.echo(resource.url);  // the echo'ed url can be downloaded in a web browser
        url = resource.url;
        file = "downloaded_file.wav";  // this will be 0 bytes
        try {
            var fs = require("fs"); // phantom js file system (not node)
            casper.download(resource.url, file);
        } catch (e) {
            this.echo(e);  // no error …
Run Code Online (Sandbox Code Playgroud)

phantomjs casperjs

5
推荐指数
1
解决办法
2450
查看次数

如何使用casperjs/phantomjs保存当前网页?

有没有办法使用casperjs或phantomjs保存当前的网页?我试图获取html并将其保存到文件中.但是生成的文件与当时的截图(with casper.capture)有很大不同.有没有办法保存当前的网页?

javascript phantomjs casperjs

5
推荐指数
1
解决办法
5477
查看次数

在heroku上每个cronjob运行casperjs

我在casperjs中创建了一个应用程序,它可以从网站上删除运动数据.

我想在heroku上按照cronjob运行此应用程序,以将运动结果保存在csv,数据库或外部google文档中(尚未确定).

但是,在我开始为heroku实现它之前,我有一个问题:

  • 我发现这个buildpackheroku,其声称,它可以运行casperjsscirpts.但是,我是否需要nodejs运行预定的脚本?或者我可以在heroku上创建一个cronjob吗?

我非常感谢你的回复!

javascript heroku node.js phantomjs casperjs

5
推荐指数
1
解决办法
764
查看次数

等待Casper.js中的URL更改?

有一个waitForUrl()在功能Casper.js,但有可能waitForUrlChange()Casper.js

我的意思是检测this.getCurrentUrl()价值的变化.我无法预测新的网址值.它可以是任何东西.

javascript casperjs

5
推荐指数
2
解决办法
5351
查看次数

等待元素与CasperJS一起使用特定文本

我正在使用CasperJS来阅读某个网页.我想要做的是在CasperJS中加载一个网页.然后,等待某个HTML元素具有特定文本.

所以我喜欢这样做:

var casper = require('casper').create();

casper.start('http://www.example.com/somepage', function() {
    this.echo('Home page opened');
});

// wait for text based on a CSS selector
casper.waitForText('.someCssClass', 'dolor sit', function() {
    this.echo('found title!');
});

// when text is eventually found, then continue with this
casper.then(function() { ... } );

casper.run();
Run Code Online (Sandbox Code Playgroud)

所以我想使用waitForText,但使用CSS选择器.这样它就可以监视certaim HTML元素中的一段文本.这对我来说并不是很明显是否以及如何做到这一点.

这可以在CasperJS中完成吗?如果是这样,我该怎么做?

javascript casperjs

5
推荐指数
1
解决办法
3553
查看次数