获取图片列表并使用CasperJS上传?

时间:2013-12-01 17:50:37

标签: upload casperjs

我需要一些CasperJS脚本的帮助。

我不知道如何从当前文件夹中将所有图片作为数组获取。 以及如何循环以在正确的输入中插入每个。

嗯,很难解释所以有我的起始代码。 我把评论放在有问题的地方。

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

casper.start('http://imgchili.net/', function() {

    // Get a list with all the picture from the current folder.

    // For each picture, click this button.
    this.mouseEvent('click', 'input.button1:nth-child(6)');

    this.fillSelectors('form#upload_form', {
        // Another loop here.
        '.grey > input:nth-child(2)':    /* First picture */,
        '.grey > input:nth-child(4)':    /* Second picture */,
        '.grey > input:nth-child(6)':    /* Third picture */
    }, true);

    casper.capture('captureTest.png');
});

// 8s can be too low if I have a lot of pictures!
casper.wait(8000, function() {
    casper.capture('captureResult.png');
})

casper.then(function() {
    this.echo(this.fetchText('textarea.input_field:nth-child(11)'));
})

casper.run();

编辑:

非常感谢它帮了我很多忙。但是我有问题来循环输入。

var fs      = require('fs'),
    casper  = require('casper').create(),
    myImages    = fs.list(fs.workingDirectory + '/img');

casper.start('http://imgchili.net/', function() {

    // For each image, click to add a new upload input.
    // Begin with 2 because 0 = "."" and 1 = "..".
    for (var i = 2; i < myImages.length; i++) {
        this.mouseEvent('click', 'input.button1:nth-child(6)');
    }

    // It doesn't work and show no error...
    for (var i = 2; i < myImages.length; i++) {

        j = i*2;

        input = '.grey > input:nth-child(' + j + ')';

        this.fillSelectors('form#upload_form', {
            input : '/img/' + myImages[i],
        }, false);

        // Even this part doesn't work
        console.log('i = ' + i + ' & imgName = ' + myImages[i]);
    }
});

casper.then(function() {
    casper.capture('result.png');
});

casper.run();

1 个答案:

答案 0 :(得分:0)

您可以使用PhantomJS文件系统获取当前文件夹文件。这是API Documentation

以下内容获取您当前的文件夹文件,然后将所有.png过滤为新数组。然后,您可以使用循环单击每个图像的按钮。您将不得不更改/添加自己的代码,因为这不会完成上载任务。这应该会对你有所帮助。

// vars
var fs            = require('fs');                // reference to phantomJS file      system
var myFolder      = fs.list(fs.workingDirectory); // gets all files in current folder
var myImages      = [];                           // only images from current folder
var url           = 'http://imgchili.net/';       // starting url
var fileType      = '.png';                       // image file type to filter by

casper.then(function() {
    // create array of just images 
    for (var i = 0; i < myFolder.length; i++) {
        if (myFolder[i].indexOf(fileType) != -1) {
            myImages.push(myFolder[i]);
        }     
    }
    // click for each image
    for (i = 0; i < myImages.length; i++) {
        this.mouseEvent('click', 'input.button1:nth-child(6)');
    }
});

// wait for images to be uploaded
// set timeout or defaults to caspers step timeout
casper.waitForSelector('#page_body', function() {
    casper.capture('captureResult.png');
}, 15000);