2

nightmare.js の Type メソッドは、テキストを入力コントロールの value プロパティに割り当てます。この実装の keydown により、スクレイピングしようとしているページで keypress イベントがトリガーされません。「タイプ」の後にキーダウンイベントを送信する方法はありますか?

編集 1-

jQueryを使用してイベントを送信する例を次に示しますが、これも機能しません-

var Nightmare = require('nightmare');
var vo = require('vo');
var nightmare = Nightmare();

vo(run)(function(err, result) {
  if (err) throw err;
});

function *run() {

  var title = yield nightmare
    .goto('http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes')
    .type('#txtChar','\n')
    .evaluate(function() {
      var e = $.Event( "keypress", { which: 13 } );
        $('#txtChar').trigger(e);
        return "Key you pressed is : " + $('#txtChar').val();
    });

  yield  nightmare.pdf('type.pdf');
  setTimeout(function () {
    console.log( ' ' + title);
    nightmare.end();
    process.exit();
  },2000);
}

編集 2-

キーに相当する Unicode を type メソッドのパラメーターとして使用すると、何らかの方法で添付イベントが呼び出されます。このハックがどのように機能するかは正確にはわかりませんが、機能します!

これが実際の例です-

var Nightmare = require('nightmare');
var vo = require('vo');
var nightmare = Nightmare();

vo(run)(function(err, result) {
  if (err) throw err;
});

function *run() {

  var title = yield nightmare
    .goto('http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes')
    .type('#txtChar','1') //so we have focus on textbox
    .type('document', '\u000d')
    .evaluate(function() {
        return "Key you pressed is : " + $('#txtChar').val();
    });

  yield  nightmare.pdf('type.pdf');
  setTimeout(function () {
    console.log( ' ' + title);
    nightmare.end();
    process.exit();
  },2000);
}
4

1 に答える 1