2017-02-09 13 views
0

私はNightmarejsを使ってウェブサイトをスクラップしています。いくつかの入力に応じて、複数の操作(約束?)を連鎖させたいその4倍の全体的なコードは次のようになりノードjでさまざまな量のメソッドを連結する方法は?

.select('select#servicios.txt_formulario', '29') 
    .wait(200) 
    .select('select#billers', '700') 
    .insert('input#identificador','60957924') 
    .click('#formPagoCuentas a[href^="javascript:AgregarCuentasaPagar"]') 
    .wait(10) 

:私は次の行(1から15まで)倍の可変量を添付できるようにしたい

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); 
    }); 

:次のコードを取ります:

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); 
    }); 

どうすればいいですか?

答えて

1

悪夢については何も知らないけど、すべてが までキューに入れられているように見えます。ちょうどそれがチェーンのために返されます。だから、これは動作するはず

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); 
    }); 
0

あなたが行くのチェーンを維持するためにreduceを使用することができます。それはどこnightmare.goto ...あるので、reduceへの第2引数は初期値を提供することを

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)); 

ノートを「ループ」の前に行く。

関連する問題