でまずは、私がnode.jsと非同期プログラミングに慣れていないことを指摘しましょう。私のコードはおそらく本当に悪いです。私はwebdriverioとcheerioを使ってwebscrapperを構築しようとしています。このWebScrapperでは、コンテンツのページと結果のページの間を移動しながらクエリの結果をスクラップし、結果が使い果たされた後に新しいクエリを実行する必要があります。この私がこれまでに出ているコードは(クライアントがすでに開始されていることを前提として機能「make_new_query()」「.then()」アクションから呼び出されている)されていますWebdriverio
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の配列の最初のリンクにこのページを入力する)、Webdriverが終了します。これはコードが最初にscrapt_contentを呼び出し、途中で終了するchange_pages関数を実行するようなものです。だから、チェーンのアクションがこの関数にある間、私はエラーを想定しています。これらのアクションを連鎖しようとしている間に誰かが私の間違いを指摘できますか?