我正在爲動態網頁編寫頁面刮除器。該頁面有一個初始加載,然後在加載時間較短後加載其餘內容。使用Electron(NightareJS)反覆點擊頁面上的元素
我已經考慮了負載,併成功地從頁面上刮掉了HTML,但頁面並沒有一次加載所有內容。而是通過GET請求URL加載指定數量的內容,然後在頁面上有一個「Get more」按鈕。我的目標是點擊這個「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請求。我認爲這不是什麼大問題。 –