CasperJS:将图像上传到表格和流程

时间:2013-11-01 01:22:59

标签: javascript phantomjs casperjs

我正在尝试使用CasperJS自动使用免费的OCR表单。

表单需要三个步骤:

  1. 上传图片,点击预览,新页面加载
  2. 调整窗口(暂时忽略),单击OCR,新页面加载
  3. 翻录生成的文本数据
  4. 当前的CasperJS脚本:

    phantom.casperPath = '{PATH_TO_CASPER_JS}';
    phantom.injectJs(phantom.casperPath + '\\bin\\bootstrap.js');
    
    var system = require('system')
    var page = require('webpage').create();
    var casper = require('casper').create();
    
    function getReturnedText() {
        return document.querySelector('#ocr-result').innerText;
    }
    
    casper.start('http://www.newocr.com/', function() {
        this.page.uploadFile('input[type="file"]', '{PATH_TO_JPEG}');
        this.click('button[name="preview"]');
    });
    
    casper.thenEvaluate(function() {
        this.click('button[name="ocr"]');
    });
    
    casper.run(function() {
        this.echo(getReturnedText());
        phantom.exit(1);
    });
    

    Casper正在加载正常,您可能认为我的路径是正确的。

    我当前的错误:

    TypeError:'null'不是对象(评估'document.querySelector('#ocr-result')。innerText')

    可能出现的问题

    • 页面未正确导航
    • 永远不会上传图片文件

2 个答案:

答案 0 :(得分:2)

调试的好方法是抛出

casper.then(function () {
this.capture('wtfishappening.png', { top: 0, left:0,     width:1020, height:2050}); 
});

...某处,所以你确切地知道你的测试是什么。我的猜测是你的文件没有被正确选中。

试试这个

var fileName='<path to file>';
    x = require('casper').selectXPath;

casper.then(function(){
    this.test.info('selecting file to upload');
    this.evaluate(function(fileName) {__utils__.findOne('input[type="file"]').setAttribute('value',fileName)},{fileName:fileName});
    this.echo('Name='+this.evaluate(function() {return __utils__.findOne('input[type="file"]').getAttribute('name')}));
    this.echo('Value='+this.evaluate(function() {return __utils__.findOne('input[type="file"]').getAttribute('value')}));
    this.page.uploadFile('input[type="file"]',fileName);
}); 

答案 1 :(得分:0)

我知道这是一个相当古老的问题,但对于遇到类似问题的人来说,希望这会有所帮助。

在调用getReturnedText时,一切看起来都应该正常工作。

  

TypeError:'null'不是对象(评估   'document.querySelector(' #OCR-结果 ')。的innerText')

我很确定错误是您尝试选择的元素未找到。这可能只是一个名称错误,或者上传的文件可能会使表单做出不同的反应。就像重定向到各种错误页面一样。前面的答案很好地说明了如何调试页面重定向到的位置/位置。找出正在发生的事情的另一个好方法是启用调试。

var casper = require('casper').create({
  verbose: true,
  userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
  logLevel: "debug"
});

所以调试和图片应该可以帮助你找出真正发生的事情。