動的なWebページ用のページスクレーパーを作成しています。ページには初期ロードがあり、短いロード時間後にコンテンツの残りの部分がロードされます。Electron(NightareJS)を使用してページ上の要素を繰り返しクリック
私は負荷を考慮し、ページからHTMLを正常に取り除いたが、すべてのコンテンツを一度に読み込むわけではありません。代わりに、GETリクエストURLを使用して指定された量のコンテンツを読み込み、そのページに[もっと取得]ボタンが表示されます。私の目的は、すべてのコンテンツがページに読み込まれるまでこの「Get More」ボタンをクリックすることです。そのような疑問がある場合、GET URL経由ですべてのコンテンツを一度にロードすることは、サーバーへの影響のためにしたくありません。
繰り返しクリックするとループや繰り返しが発生します。
const NIGHTMARE = require("nightmare"); \t \t
const BETHESDA = NIGHTMARE({ show: true });
BETHESDA
// Open the bethesda web page. Web page will contain 20 mods to start.
.goto("https://bethesda.net/en/mods/skyrim?number_results=40&order=desc&page=1&platform=XB1&product=skyrim&sort=published&text=")
// Bethesda website serves all requested mods at once. Each mod has the class "tile". Wait for any tile class to appear, then proceed.
.wait(".tile");
let additionalModsPresent = true;
while(additionalModsPresent) {
setTimeout(function() {
BETHESDA
.wait('div[data-is="main-mods-pager"] > button')
.click('div[data-is="main-mods-pager"] > button')
}, 10000)
additionalModsPresent = false;
}
// let moreModsBtn = document.querySelector('div[data-is="main-mods-pager"] > button');
// .end()
BETHESDA.catch(function (error) {
console.error('Search failed:', error);
});
私の考えは、これまでの時間のいくつかの間隔の後、ボタンをクリックしようとし、whileループを使用することでした。エラーが発生した場合は、ボタンが存在しない可能性が高いです。私が抱えている問題は、クリックがsetTimeoutまたはsetIntervalの内部で動作するように見えないことです。スコープに関する問題があると思いますが、正確に何が起こっているのか分かりません。
clickメソッドがsetIntervalなどで機能するようになると、問題は解決されます。
思考?あなたが問題(ループ内で実行されている問題悪夢)を参照することができ
答えをよろしくお願いいたします。私は、ソリューションのメモリ問題に遭遇したくないと思う。私はそれをやって、何度も大量のGETリクエストを送信することになると思います。私はそれが大きな問題になるとは思わない。 –