Я экспериментировал с puppeteer на YouTube и пытался очистить URL-адрес src и текст заголовка с миниатюр главной страницы YouTube, и программа очистки работает нормально. Проблема заключается в том, что когда он очищает заголовок и src миниатюр, программа начинает прыгать по строкам при регистрации URL-адреса src, но она отлично работает для текстовых данных. Когда я пытался понять рекурсивность прыжка строки, был скачок на 7 строк, а затем переход на 14 строк снова и снова после каждого раза, когда программа очищает информацию. Я не могу понять, почему скачок строки происходит при очистке URL-адреса src, но не заголовка текста. Это как-то связано с моим методом обработки бесконечной прокрутки?
async function scrape(url) {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.setViewport({
width: 1200,
height: 800
});
const navigationPromise = page.waitForNavigation();
await page.goto(url, {
timeout: 0
});
await page.evaluate(_ => {
window.scrollBy(0, window.innerHeight);
});
await page.waitFor(5000);
await page.waitForSelector('#img')
await navigationPromise;
const loadThumbnailText = [];
const loadThumbnailSrc = [];
var ytTextData;
for (let i = 0; i < 50; i++) {
const textSelector = 'h3 > a > #video-title'
const srcSelector = 'ytd-thumbnail > a > yt-img-shadow > #img'
await page.waitForSelector(textSelector)
await page.waitForSelector(srcSelector)
const ytTextData = await page.$$eval(textSelector, elems => elems.map(el => el.textContent).join('\n'))
const ytSrcData = await page.$$eval(srcSelector, elems => elems.map(el => el.src).join('\n'))
if (ytTextData && ytSrcData) {
console.log({
ytTextData,
ytSrcData
})
loadThumbnailText.push(ytTextData);
loadThumbnailSrc.push(ytSrcData);
console.log(ytTextData, ytSrcData)
}
}
browser.close();
}