Да, я не знаком с Instagram, но я постараюсь шаг за шагом поработать с вами.С первого взгляда вы не сильно ошибаетесь (к сожалению, у меня нет возможности протестировать этот код, поскольку я не подписан на Instagram), но есть несколько вещей, которые выделяются.
scrapeInfiniteScrollItems
функция:
let scrollBox1 = await page.$eval('.isgrP', el => el.querySelector('body > div:nth-child(15) > div > div > div.isgrP > ul > div'));
let scrollBox2 = await page.$eval('body > div:nth-child(15) > div > div > div.isgrP > ul > div', el => el);
Вы указываете, что обе эти строки возвращают неопределенный.Это потому, что вы не совсем правильно используете метод $eval
.Метод $eval
позволяет вам выполнить команду querySelector
, чтобы найти определенный элемент DOM (соответствующий объявленному вами селектору CSS), а затем внутренняя функция выполняет инструкции JavaScript в реальном времени для этого элемента DOM..
Итак, давайте посмотрим на вашу первую строку: вы просите сделать querySelector
для элемента с классом isgrP
, но затем вы запускаете еще один querySelector
для этого элемента, который используетCSS-селектор, который начинается с body
?Это не имеет смысла.
Я также вижу из этого странного селектора, что он заканчивается на div.isgrP > ul > div
, который, по совпадению, имеет div
с тем же именем класса, которое вы изначально запрашивали с помощью $eval
метод.Так вы всегда намеревались найти элемент в div.isgrP > ul > div
?
Вы можете напрямую получить доступ к элементу DOM, используя puppeteer
, переработав ваш код следующим образом:
const scrollBox = await page.$eval('div.isgrP > ul > div.PZuss', (uiElement) => {
return uiElement;
});
Это вернетваш элемент DOM (не экземпляр ElementHandle
) для прокручиваемого блока, который вы искали.
Пожалуйста, дайте мне знать, если это помогает и что вызывает вашу следующую проблему.