Запрос селектора внутри фрейма - PullRequest
1 голос
/ 31 марта 2019

Я строю простой скребок с помощью Puppeteer / JS.

Я пытаюсь получить массив абзацев со страницы, и HTML выглядит так, как показано на [этом изображении] [1].

Когда я использую идентификатор (#iframeContent), я ничего не получаю.Когда я пытаюсь использовать индикатор глубины, как таковой,

await page.$eval('#bookDesc_iframe_wrapper > iframe')

теряет трек, пытаясь нажать> документ или> # документ.

В консоли разработчика на Google я могупоиск по селектору запросов возможен только в том случае, если я пошел и открыл этот документ> html> body вручную, в противном случае даже консоль Google не видит #iframeContent.

1 Ответ

1 голос
/ 31 марта 2019

Вы не можете использовать селекторы между кадрами.Сначала вы должны найти рамку, а затем работать внутри рамки.Используйте page.frames(), чтобы получить список всех фреймов страницы, и frame.name(), чтобы определить ваш целевой фрейм.

Затем вы можете выполнять такие функции, как frame.$$ или frame.evaluate, как на странице.

Код может выглядеть следующим образом:

const frames = await page.frames();
const iframe = frames.find(f => f.name() === 'bookDesc_iframe'); // name or id for the frame

const paragraphs = await iframe.$$('p');
...