Я пытаюсь очистить информацию с помощью Puppeteer с веб-страницы, на которой отображается таблица со ссылками.
Когда вы открываете одну ссылку, открывается модальное окно с дополнительной информацией.
Я пытаюсь открыть все ссылки и получить информацию по всем из них.
Это мой код:
const puppeteer = require('puppeteer');
const fs = require('fs');
puppeteer.launch({headless: false}).then(async browser => {
const page = await browser.newPage();
await page.goto('https://fcylf.es/competiciones');
const competitionframe = await page.frames().find(f => f.name() === 'iframecombos');
const button = await competitionframe.$('#formulario > div.centrado > input.btn.btn-danger.boton_envio.btn-lg');
button.click();
let mainframe = await page.frames().find(f => f.name() === 'iframebooox');
await mainframe.waitForSelector('#datos > ul > li:nth-child(3) > a');
const div = await mainframe.$('#datos > ul > li:nth-child(3) > a');
div.click();
await mainframe.waitForSelector('#clasificacion > .panel > .table-responsive > #resultadosTable > tbody > tr > td > div > a');
const teams = await mainframe.$$('#clasificacion > .panel > .table-responsive > #resultadosTable > tbody > tr > td > div > a ');
const results = [];
for(let team of teams){
team.click();
await mainframe.waitForSelector('#myModalLabel');
const name = await mainframe.$eval('#myModalLabel', name => name.textContent );
results.push(name);
const closebt = await mainframe.$('#datos > div.equipoModal.modal.fade.in > div > div > div.modal-footer > button');
if (closebt!=null){
closebt.click();
}
}
console.info(results);
});
Но когда я показываю журнал, он всегда показывает один и тот же результат.
Я думаю, вы хотите найти #myModalLabel
в div, который настроен на display: block;
Скрытый модальный:
<div class = "equipoModal modal fade" tabindex = "-1" role = "dialog" aria-labelledby = "basicModal" aria-hidden = "true" style = "display: none;">
Показано модальное окно:
<div class = "equipoModal modal fade in" tabindex = "-1" role = "dialog" aria-labelledby = "basicModal" aria-hidden = "false" style = "display: block;">
Эта строка:
const name = await mainframe.$eval('#myModalLabel', name => name.textContent );
Похоже, он захватывает textContent из скрытых модальных окон, а не из того, что отображается.
Думаю. Надеюсь это поможет!
Я решил включить waitFor со временем, чтобы позволить модальному окну открыться, и waitFor со временем, чтобы позволить модальному закрытию. Спасибо за помощь!
Похоже, они использовали этот идентификатор
#myModalLabel
примерно 31 раз. Я думаю, это вас обманывает.