如何在节点 js 上链接可变数量的方法?
How to chain a variable amount of methods on node js?
我正在使用 Nightmarejs 删除网站。我想根据一些输入链接多个操作(承诺?)。取以下代码:
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
nightmare
.goto('https://www.servipag.com/')
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
.click('#formPagoCuentas a[href^="javascript:enviar"]')
.wait('fieldset')
.evaluate(function () {
return document.querySelector('.txt_detalle_boleta').innerHTML;
})
.end()
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.error('Search failed:', error);
});
我希望能够附加以下行的可变次数(从 1 到 15):
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
所以四次的总代码为:
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
nightmare
.goto('https://www.servipag.com/')
// -- repeat this 4 times
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
// ---
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
// ---
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
// ---
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
// -- end
.click('#formPagoCuentas a[href^="javascript:enviar"]')
.wait('fieldset')
.evaluate(function () {
return document.querySelector('.txt_detalle_boleta').innerHTML;
})
.end()
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.error('Search failed:', error);
});
我该怎么做?
我对噩梦一无所知,但看起来一切都在排队直到
你调用 end 并且它只是 returns 本身用于链接。所以这应该有效
var operations = nightmare.goto('https://www.servipag.com/');
for(var i = 0; i < 4; i++) {
operations = operations
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10);
}
operations
.click('#formPagoCuentas a[href^="javascript:enviar"]')
.wait('fieldset')
.evaluate(function () {
return document.querySelector('.txt_detalle_boleta').innerHTML;
})
.end()
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.error('Search failed:', error);
});
您可以使用 reduce
来保持链条运行:
Array(4).fill().reduce( acc =>
acc.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10),
nightmare.goto('https://www.servipag.com/') )
.click('#formPagoCuentas a[href^="javascript:enviar"]')
.wait('fieldset')
.evaluate( _ => document.querySelector('.txt_detalle_boleta').innerHTML )
.end()
.then( result => console.log(result) )
.catch( error => console.error('Search failed:', error) );
请注意,reduce
的第二个参数在 "loop" 之前提供初始值,因此这就是 nightmare.goto ...
所在的位置。
我正在使用 Nightmarejs 删除网站。我想根据一些输入链接多个操作(承诺?)。取以下代码:
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
nightmare
.goto('https://www.servipag.com/')
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
.click('#formPagoCuentas a[href^="javascript:enviar"]')
.wait('fieldset')
.evaluate(function () {
return document.querySelector('.txt_detalle_boleta').innerHTML;
})
.end()
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.error('Search failed:', error);
});
我希望能够附加以下行的可变次数(从 1 到 15):
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
所以四次的总代码为:
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
nightmare
.goto('https://www.servipag.com/')
// -- repeat this 4 times
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
// ---
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
// ---
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
// ---
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10)
// -- end
.click('#formPagoCuentas a[href^="javascript:enviar"]')
.wait('fieldset')
.evaluate(function () {
return document.querySelector('.txt_detalle_boleta').innerHTML;
})
.end()
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.error('Search failed:', error);
});
我该怎么做?
我对噩梦一无所知,但看起来一切都在排队直到 你调用 end 并且它只是 returns 本身用于链接。所以这应该有效
var operations = nightmare.goto('https://www.servipag.com/');
for(var i = 0; i < 4; i++) {
operations = operations
.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10);
}
operations
.click('#formPagoCuentas a[href^="javascript:enviar"]')
.wait('fieldset')
.evaluate(function () {
return document.querySelector('.txt_detalle_boleta').innerHTML;
})
.end()
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.error('Search failed:', error);
});
您可以使用 reduce
来保持链条运行:
Array(4).fill().reduce( acc =>
acc.select('select#servicios.txt_formulario', '29')
.wait(200)
.select('select#billers', '700')
.insert('input#identificador','60957924')
.click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]')
.wait(10),
nightmare.goto('https://www.servipag.com/') )
.click('#formPagoCuentas a[href^="javascript:enviar"]')
.wait('fieldset')
.evaluate( _ => document.querySelector('.txt_detalle_boleta').innerHTML )
.end()
.then( result => console.log(result) )
.catch( error => console.error('Search failed:', error) );
请注意,reduce
的第二个参数在 "loop" 之前提供初始值,因此这就是 nightmare.goto ...
所在的位置。