С Puppeteer: Как я могу получить iframe из его селектора родительского элемента? - PullRequest
1 голос
/ 29 апреля 2019

Я хочу получить iframe в качестве фрейма и щелкнуть элемент в фрейме, но у iframe нет имени, а у веб-сайта много фреймов (page.frames() возвращает 14).

И у меня нет разрешения на редактирование HTML.Я могу редактировать только JavaScript.

Я думаю, что лучший способ идентифицировать iframe в этом случае - это его родительский элемент.

Как я могу сделать это с кукловодом?

<div id="foo">
  <iframe>
    #document
  </iframe>
</div>

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Вы можете использовать функцию elementHandle.contentFrame() для возврата кадра из дескриптора элемента.

Цитата из документации:

Преобразуется в фрейм контента для дескрипторов элементов, ссылающихся на узлы iframe, или ноль в противном случае

Пример:

const elementHandle = await page.$('div#foo iframe');
const frame = await elementHandle.contentFrame();
1 голос
/ 29 апреля 2019

Имея идентификатор любого элемента, вы можете легко просматривать его дочерние элементы и находить все, что соответствует определенным критериям, например, являясь iframe.
Функцию фильтра использовать нельзя, поскольку это не массив, а NodeList.

var parent = document.getElementById("foo");
var iframes = [];
for(var i = 0; i < parent.children.length; i++){
  var child = parent.children[i];
  if(child.localName == 'iframe'){
    iframes.push(child);
  }
  };
console.log(iframes)
<div id="foo">
  <iframe>
    #document
  </iframe>
</div>
...