【发布时间】: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