【问题标题】:CasperJS or PhantomJS - how to export variable in-between functions?CasperJS 或 PhantomJS - 如何在函数之间导出变量?
【发布时间】:2018-08-04 21:46:51
【问题描述】:

使用 CasperJS 或 PhantomJS 我想:

1.) 访问 1 个页面并获取验证码图像。

2.) 然后在本地服务器上解码验证码。

3.)然后将解码后的Captcha结果提交到1. page。

4.) 并获得结果 (HTML)。

假设验证码为12345 的简单测试,以测试所有值是否已正确输入和执行,例如:

var casper = require('casper').create({ verbose: true, logLevel: "debug" });
var NUMBER_TO_CHECK = '356702087654321';
var DECODED_CAPTCHA = '12345';

casper.start('https://checkcoverage.apple.com/', function () {

    this.sendKeys('input#serial-number', NUMBER_TO_CHECK);
    this.sendKeys('input#captcha-input', DECODED_CAPTCHA);
    this.mouseEvent('click', '.button-label', '50%', '50%');

this.wait(1000, function () {
      this.echo('WAIT DONE');
   });
});

casper.then(function (e) {
      this.capture('logged-in.png');//print screen shot after click
});

casper.run();

上面的这段代码 sn-p 给出了成功的结果,并说给定的验证码 12345 不正确,这是真的。


现在我需要修改这个 sn-p 以便我可以获取验证码图像并在本地服务器上对其进行处理,我尝试过:

var casper = require('casper').create({ verbose: true, logLevel: "debug" });
var NUMBER_TO_CHECK = '356702087654321';

casper.start('https://checkcoverage.apple.com/', function () {

    this.sendKeys('input#serial-number', NUMBER_TO_CHECK);

// Get Encoded Captcha as Var
    var captcha_encoded = casper.evaluate(function() {
        return document.getElementsByClassName('captcha-image')[0].outerHTML;
    });

// Post Encoded Captcha for decoding processing.
    casper.then(function() { this.open('http://127.0.0.1/decode_captcha.php', {
            method: 'post', data: { 'data': captcha_encoded } });
    });

// Return Decoded Captch
    casper.then(function() { var DECODED_CAPTCHA = this.getHTML('body');
        this.echo(DECODED_CAPTCHA);
        return(DECODED_CAPTCHA);        
    });


// How to Submit the Decoded Captcha result here ?
// Stuck here....
// ...
//  this.sendKeys('input#captcha-input', DECODED_CAPTCHA);
//  this.mouseEvent('click', '.button-label', '50%', '50%');


this.wait(1000, function () {
      this.echo('WAIT DONE');
   });
});

casper.then(function (e) {
      this.capture('logged-in.png');//print screen shot after click
});

casper.run();

使用this.echo(DECODED_CAPTCHA);,我在控制台日志中获得了解码的验证码结果。但是logged-in.png 显示的是来自本地服务器的屏幕截图,而不是来自 1. 页面。


问题:如何将 var DECODED_CAPTCHA 结果提交到 1. 页面?

【问题讨论】:

  • 当然截图会显示本地页面——当你打开本地页面服务器时,你基本上放弃了apple.com网站并转到127.0.0.1。所以这不是要走的路。现在想想:PhantomJS/CasperJS 还有哪些其他的 I/O 方式?

标签: javascript function phantomjs casperjs var


【解决方案1】:

这是一个微妙的问题。根据官方文档,不支持并行浏览

Is it possible to achieve parallel browsing using CasperJS?

对于您的用例,您需要完全保持验证码相同。

您可以尝试在this group 中发布的示例,看看它是否对您有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多