Nightmare.js и Vo.js - выход из цикла раньше

var Nightmare = require ( 'nightmare' ), vo = require ( 'vo' ), fs = require ( 'fs' ), parse = require ( 'csv-parse' ), csvWriter = require ( 'csv-write-stream' ), nightmare = Nightmare (), writer = csvWriter (), path = process . argv [ 2 ] var searchByPostcode = function * ( postcode ) { var result = урожай кошмара . goto ( URL ) . выберите ( '# body_umbBodyContent_BranchSearch_1_ddlRadius' , 20 ) . type ( 'input [id = body_umbBodyContent_BranchSearch_1_txtLocation]' , почтовый индекс ) . щелкните ( '# body_umbBodyContent_BranchSearch_1_btnSearch' ) . wait ( '.resultsarea .result' ) . Оценить ( function () { var agents = [] var results = $ ( '.result a, .alternate_result a' ) urls = results . map ( function ( r ) { return BASE_URL + $ ( this ). attr ( 'href' ) }) return urls }) return result } var getDetail = function * ( url ) { var result = yield nightmare . goto ( url ) . wait ( '.wizard' ) . Оценить ( function () { var company = $ ( "div.divlabel: contains ('Company:')" ). next ( 'div' ). find ( 'a' ). attr ( 'href' ) var name = $ ( 'h1.tint' ). text (). trim () var address = $ ( '#address_container div: nth-child (2)' ). text (). trim () var website = $ ( "div.divlabel : содержит ('Сайт:') " ). next ( 'div' ). find ( 'a' ). attr ( 'href' ) var tel = $ ( " div.divlabel: contains ('Telephone:') " ) . следующий ( 'DIV' ). текст (). дифферент () вар электронной почты = $ ( "div.divlabel: содержит ( 'E-Mail:')" ). следующий ( 'DIV' ). найти ( 'а' ) . текст (). дифферент () возвращение { URL : документ . URL , компания : компания , имя : имя , адрес : адрес , веб - сайт : сайт , тела : тела , электронная почта : электронная почта } }) обратный результат } вар пробег = функция * () { var agents = [] var postcodes = fs . readFileSync ( путь , 'utf8' ). split ( ' n' ) для ( var i = 0 , len = postcodes . length ; i < len ; i ++) { console . войти ( почтовые индексы [ я ]) вар URLs = выход searchByPostcode ( почтовые индексы [ я ]) консоли . войти ( URL - адресов ) для ( вар я = 0 , Len = URLs . длины ; я < Len ; я ++) { вар агента = выход GetDetail ( URLs [ я ]) , если ( агент . почты == '' & агент . компании ! = '' ) { компания = выход GetDetail ( 'http://www.arla.co.uk/' + агент . компания ) агент . сайт = агент . сайт == undefined ? компании . сайт : агент . агент веб-сайта . email = агент . email == '' ? компании . email : агент . агент электронной почты . tel = агент . tel == '' ? компании . тел : агент . тела } агенты . push ( агент ) } } дают кошмар . end (); return agent } vo ( run ) () . то ( функция ( агенты ) { писатель . pipe ( fs . createWriteStream ( 'results.csv' )) для ( var i = 0 , len = agent . length ; i < len ; i ++) { writer . write ( агенты [ i ]) } writer . end () }) . catch ( e => console . error ( e )). Создает экранный скребок с использованием Nightmare.js и использует Vo.js для управления потоком. У меня есть массив почтовых индексов из CSV и прокручивается через почтовые индексы, выполняйте поиск, следуйте каждой ссылке в результатах поиска и очищайте эту страницу. Тем не менее, кажется, что когда-либо выполнялся поиск с использованием первого почтового индекса, который, казалось бы, вышел из цикла раньше. Есть идеи? Вот мой код:

javascript,nightmare,

0