【やろうとしていること】
スクレイピング処理(Node.js)を実装しており、「前月へ」のリンクがあったら、そのリンクを踏んでスクレイピングしていくといった流れです。
まずは、URLを一通り取得する処理を実装していますが、do whileでループさせて取得したURLbeforeLastMonthurl
を配列で返り値として返してやろうとしていますが、うまく値が渡らない状況です。
やりたいことは、do whileのループが全て終了し、値を取り切ったタイミングでretuenしたい。
が、現状1巡目でreturnされてしまう。
js
1async searchLastMonth(Id) { 2 const beforeLastMonthurl = []; 3 beforeLastMonthurl.push( 4 `https://hoge.com/id=${liverId}` 5 ); 6 let pageBoolean = true; 7 do { 8 const lastMonthLink = await this.page.$("a.prev");// 前月のリンクの有無 あればtrue 9 if (lastMonthLink) { 10 console.log("先月もあるよ"); 11 12 const groupLinks = await this.page.$$eval( 13 "a.prev", 14 (hrefs) => 15 hrefs.map((a) => { 16 return a.href; 17 }) 18 ); 19 20 beforeLastMonthurl.push(String(groupLinks)); 21 await this.page.goto(String(groupLinks)); 22 pageBoolean = true; 23 } else { 24 console.log("先月のデータはないよ"); 25 pageBoolean = false; 26 return beforeLastMonthurl; 27 } 28 } while (pageBoolean == false); 29 30 }
js
1// 関数呼び出し 2// 抜粋 3 const Page = new Page(browser, page); 4 console.log(await Page.searchLastMonth(Id); 5// ここで`beforeLastMonthurl`を受け取りたい
【現在の状況】
ページ遷移自体はできていて、前月リンクがあれば遷移、なければ終了はしています。
ただ、urlを入れたbeforeLastMonthurl
が渡りません。
【わからないこと】
do while のどのタイミングでreturnの処理を書いたら良いかわからない。
試しに各処理の最後にreturn beforeLastMonthurl
と書いてみたが、うまく渡らない状況です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。