Невозможно отправить форму с помощью CasperJS - другими словами, невозможно войти в систему

Я пытаюсь войти в Tumblr с помощью CasperJS, используя методы start, fill и waitForUrl, но не могу этого сделать. Мне кажется, что форма не была отправлена, потому что время ожидания в waitForUr каждый раз истекало.

Ответ терминала:

Я использую следующий код:

/*jslint browser: true, regexp: true */
// global casper, require 

var LOGIN_URL, LOGIN_USERNAME, LOGIN_PASSWORD, casper;

casper = require('casper').create({
    waitTimeout: 20000,
    viewportSize: {
        width: 1024,
        height: 768
    },
    verbose: true,
    logLevel: 'debug',
    userAgent: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'
});

if (!casper.cli.has('username') && !casper.cli.has('password')) {
    casper.echo('Usage: $ casperjs sfdclogin.casper.js --username=USERNAME --password=PASSWORD').exit(-1);
}

LOGIN_URL = 'https://tumblr.com/login';

LOGIN_USERNAME = casper.cli.get('username');
LOGIN_PASSWORD = casper.cli.get('password');

phantom.cookiesEnabled = true;

casper
    .start(LOGIN_URL, function () {
        // 'use strict';

        this.log('Logging in', 'debug');
        /*
        this.fillSelectors('#signup_form_form', {
            '#signup_email': LOGIN_USERNAME,
            '#signup_password': LOGIN_PASSWORD
        }, true);
        */

        this.fill('#signup_form_form', {
            '#user[email]': LOGIN_USERNAME,
            '#user[password]': LOGIN_PASSWORD
        }, true);
    })

    .waitForUrl('http://tumblr.com/dashboard', function () {
        // 'use strict';

        this.echo('We\'re logged in.');
    })

    .run();

Кроме того, я использую правильное имя пользователя и пароль в этом скрипте.


person Vladimir Starkov    schedule 04.09.2013    source источник


Ответы (1)


Попробуйте использовать следующее вместо вашего текущего casper.fill(). Это связано с тем, что fill() CasperJS ищет атрибут name элементов.

this.fill('#signup_form', {
    'user[email]': LOGIN_USERNAME,
    'user[password]': LOGIN_PASSWORD
}, true);

Вы можете использовать это, если хотите продолжать использовать идентификаторы в качестве селекторов.

this.fillSelectors('#signup_form', {
    '#signup_email': LOGIN_USERNAME,
    '#signup_password': LOGIN_PASSWORD
}, true);
person hexid    schedule 04.09.2013
comment
В вашем обновленном коде у вас все еще есть # перед селекторами. Это должно выглядеть как user[email]. Кроме того, вам нужно будет изменить #signup_form_form на #signup_form - person hexid; 04.09.2013
comment
Спасибо, основная проблема была #signup_form - person Vladimir Starkov; 04.09.2013