提交表单或单击提交输入不起作用

时间:2016-02-25 11:16:32

标签: javascript phantomjs casperjs

我目前正在使用phantomjs 2.1.1casper 1.1.0-beta5来自动执行基本登录过程。但是,我没有最好的运气。下面我能够成功填写带有值的表单,但是当我尝试提交时会出现问题。我尝试使用clickselectors等提交表单但没有结果。有关如何使用以下代码成功登录的任何想法?

var casper = require('casper').create({
    verbose: true,
    logLevel: 'error',
    viewportSize: {
        width: 1280,
        height: 720
    },
    pageSettings: {
        ignoreSslErrors: true,
        loadImages: false, // do not load images
        loadPlugins: false, // do not load NPAPI plugins (Flash, Silverlight, ...)
        webSecurityEnabled: false
    }
});

var x = require('casper').selectXPath;
phantom.cookiesEnabled = true;
var fs = require('fs');
var cookies = JSON.stringify(phantom.cookies);
fs.write("cookies.txt", cookies, 644);

casper.start('https://www.quora.com/login', function() {
    this.sendKeys("input[name=email]", "xxxxxxx@gmail.com", {
        keepFocus: true
    });
    this.page.sendEvent("keypress", this.page.event.key.Tab);
    this.sendKeys("input[name=password]", "xxxxxxx", {
        keepFocus: true
    });
});

casper.then(function() {
    this.evaluate(function() {
        document.getElementById('__w2_IXl7ObX_login_form').submit();
    });
});

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

casper.run();

截图

enter image description here

HTML

<form id="__w2_gptxdFS_login_form" class="inline_login_form" method="POST">
    <div class="title">Login</div>
    <div class="form_inputs">
        <div class="form_column">
            <input id="__w2_gptxdFS_email" class="text header_login_text_box ignore_interaction" type="text" w2cid="gptxdFS" tabindex="1" name="email" placeholder="Email" group="__w2_gptxdFS_interaction">
        </div>
        <div class="form_column">
            <input id="__w2_gptxdFS_password" class="text header_login_text_box ignore_interaction" type="password" w2cid="gptxdFS" tabindex="2" name="password" placeholder="Password" group="__w2_gptxdFS_interaction">
        </div>
        <input id="__w2_gptxdFS_submit_button" class="submit_button ignore_interaction submit_button_disabled" type="submit" w2cid="gptxdFS" tabindex="4" value="Login" group="__w2_gptxdFS_interaction">
    </div>
</form>

2 个答案:

答案 0 :(得分:2)

我认为以下内容应该为您解决问题:

var casper = require('casper').create({
    verbose: true,
    logLevel: 'debug',
    viewportSize: {
            width: 1280,
        height: 720
    },
    pageSettings: {
        ignoreSslErrors: true,
        loadImages: false, // do not load images
        loadPlugins: false, // do not load NPAPI plugins (Flash, Silverlight, ...)
        webSecurityEnabled: false,
        localToRemoteUrlAccessEnabled: false
    }
});

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

casper.on('page.error', function(msg, trace) {
    this.echo('Error: ' + msg, 'ERROR');
});

casper.start('https://www.quora.com', function() {
    this.echo ('loggin in');
    this.fillSelectors('div.form_inputs', {
        'input[type="text"]': 'xxxxxx@gmail.com',
        'input[type="password"]': 'xxxxxxx'
    }, false);
});

casper.then(function() {
    this.click('input.submit_button.ignore_interaction');
}).wait(5000, function(){});

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

casper.run();

我用casperjs --ignore-ssl-errors=true --ssl-protocol=any test.js运行了这个 否则,我在调试模式下运行脚本时看到[warning] [phantom] Loading resource failed with status=fail (HTTP 500): https://www.quora.com/

运行上述代码后的屏幕截图是:

Error message after clicking login

此邮件中未找到任何帐户&#39;在我们登录后发生。因此,登录点击实际上就是在这种情况下工作。

在代码中,我等待5秒钟才能完成登录调用,但是您可以等待登录后发生的页面中的某些html元素。

答案 1 :(得分:1)

在密码中发送\n(输入密钥),填写后应立即提交表格。

this.sendKeys("input[name=password]", "xxxxxxx\n", {
        keepFocus: true
    });