puppeteer 上的 scrollIntoView() 循环元素
scrollIntoView() looping element on puppeteer
我想在页面滚动无限加载时抓取帖子列表。我想要 scrollIntoView()
循环中的每个元素。我的代码暂时是这样的,页面加载时的结果,跳出但没有错误。
for (let i = 0; i < 20; i++) {
const selector = 'div[role="feed"]:nth-child(2) div.sjgh65i0'
await page.evaluate((selector, i) => {
setTimeout(() => {
const element = document.querySelectorAll(selector)[i]
if(element) {
element.scrollIntoView();
}
}, 2000);
}, selector, i)
}
比如我想取20个帖子,然后爬虫会一个一个取。
在您当前的流程中,所有超时几乎都是同时设置的,然后在相同的 2 秒后全部触发。
尝试这样的事情:
const selector = 'div[role="feed"]:nth-child(2) div.sjgh65i0';
for (let i = 0; i < 20; i++) {
await page.waitForTimeout(2000);
await page.evaluate((selector, i) => {
const element = document.querySelectorAll(selector)[i];
if(element) {
element.scrollIntoView();
}
}, selector, i);
}
我想在页面滚动无限加载时抓取帖子列表。我想要 scrollIntoView()
循环中的每个元素。我的代码暂时是这样的,页面加载时的结果,跳出但没有错误。
for (let i = 0; i < 20; i++) {
const selector = 'div[role="feed"]:nth-child(2) div.sjgh65i0'
await page.evaluate((selector, i) => {
setTimeout(() => {
const element = document.querySelectorAll(selector)[i]
if(element) {
element.scrollIntoView();
}
}, 2000);
}, selector, i)
}
比如我想取20个帖子,然后爬虫会一个一个取。
在您当前的流程中,所有超时几乎都是同时设置的,然后在相同的 2 秒后全部触发。
尝试这样的事情:
const selector = 'div[role="feed"]:nth-child(2) div.sjgh65i0';
for (let i = 0; i < 20; i++) {
await page.waitForTimeout(2000);
await page.evaluate((selector, i) => {
const element = document.querySelectorAll(selector)[i];
if(element) {
element.scrollIntoView();
}
}, selector, i);
}