Во-первых, позвольте мне отметить, что я новичок в node.js и асинхронном программировании, поэтому мой код, вероятно, действительно плох. Я пытаюсь создать веб-скребок, используя webdriverio и cheerio. В этом веб-скребке я должен выполнить запрос, очистить результаты запроса при перемещении между страницами содержания и страницами результатов, а затем выполнить новый запрос после того, как результаты будут исчерпаны. Это код, который я придумал до сих пор (предположим, что клиент уже был инициирован и функция make_new_query () вызывается из действия .then ()):
function scrapt_content(){
// if array of content links is exhausted -> move to next page or perform new query
if(contents_pointer == contents.length){
return client.isExisting("li.next-page > a").then(function(isExisting){
// if there is a link to a a new page of results -> move to new page
if(isExisting){
return change_pages();
} else {
return make_new_query();
};
});
// change to new and scrapt it
} else {
// var parsed = cheerio.load(res);
... scrap content using cherio ...
.
.
.
contents_pointer++;
return scrapt_content();
})
};
};
function change_pages(){
client
.click("li.next-page > a")
.getAttribute("h2 a", "href");
.then(function(res){
contents_pointer = 0;
news_links = res;
return scrapt_content();
})
}
function make_new_query(){
.
.
.
client.url(new_query_url)
.getAttribute("h2 > a", "href")
.then(function(res){
content_links = res;
return scrapt_content();
})
}
}
Проблема в том, что после перехода на первую страницу содержимого для очистки (код выполняет запрос и входит на эту страницу, которая является первой ссылкой в массиве content_links), веб-драйвер закрывается. Это похоже на то, что код сначала выполняет функцию change_pages, которая вызывает scrapt_content, а затем преждевременно завершается. Итак, я предполагаю, что ошибка при связывании действий находится в этой функции. Может ли кто-нибудь указать на мои ошибки при попытке связать эти действия?