发送 keydown, keypress on type in nightmare.js
Sending keydown, keypress on type in nightmare.js
nightmare.js 中的类型方法将文本分配给输入控件的值 属性。由于此实现 keydown,keypress 事件不会在您尝试抓取的页面上触发。在 'type' 之后发送按键事件的任何方式?
编辑 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 作为参数来键入方法会以某种方式调用附加事件,不确定这个 hack 是如何工作的,但它确实有效!
这是工作示例-
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);
}
您可以使用纯 JS 或 jQuery 评估页面并发送 keydown 事件,jQuery 是最简单的方法,但最容易被注入。
使用jQuery:
.inject('js', '/jquery-2.1.4.min.js')
.evaluate(function () {
var e = $.Event( "keypress", { which: 13 } );
$('#yourInput').trigger(e);
});
编辑: Nightmare 似乎支持触发按键事件。看看https://github.com/segmentio/nightmare/issues/244 and https://github.com/segmentio/nightmare/issues/147.
EDIT2: 不,应该是 .type('document', '\u000d')
。得到了错误的 unicode 字符。
nightmare.js 中的类型方法将文本分配给输入控件的值 属性。由于此实现 keydown,keypress 事件不会在您尝试抓取的页面上触发。在 'type' 之后发送按键事件的任何方式?
编辑 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 作为参数来键入方法会以某种方式调用附加事件,不确定这个 hack 是如何工作的,但它确实有效!
这是工作示例-
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);
}
您可以使用纯 JS 或 jQuery 评估页面并发送 keydown 事件,jQuery 是最简单的方法,但最容易被注入。
使用jQuery:
.inject('js', '/jquery-2.1.4.min.js')
.evaluate(function () {
var e = $.Event( "keypress", { which: 13 } );
$('#yourInput').trigger(e);
});
编辑: Nightmare 似乎支持触发按键事件。看看https://github.com/segmentio/nightmare/issues/244 and https://github.com/segmentio/nightmare/issues/147.
EDIT2: 不,应该是 .type('document', '\u000d')
。得到了错误的 unicode 字符。