【发布时间】:2021-04-21 11:59:51
【问题描述】:
您好,我是编程新手,我一直在使用 libery pupperter。我的问题是我无法从同一个选择器中获取所有信息。该网站是http://eportal.miteco.gob.es/BoleHWeb/,我需要获取Embases Guadarquivir 的信息。如果我在网站控制台上执行此操作,我会从选择器中获取所有信息,但如果我在 .js 中执行此操作,我只能从同一个数组中获取 30 到 40 个元素。
The information i get from the console
const puppeter = require('puppeteer');
let embalse = require('../controlador/controladorEmbalse');
(async () => {
//inicializamos en la constante browser, la libreria puppeter.
//Con {headless: false}, nos sale una ventana chrome con los movimientos que estamos realizando.
const browser = await puppeter.launch({headless: false});
//creamos una pagina de chrome
const page = await browser.newPage();
let year = ['2020','2019','2018','2017','2016','2015','2014','2013','2012','2011','2010','2008','2007','2006','2005'];
let month = ["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"];
let day = '#idDate27'
let cuenca = [{nombre: 'Tinto, Odiel y Piedras', id:"#btnMod_Reserva_Hidraulica_Datos_16" }, {nombre: 'Guadalete-Barbate', id: '#btnMod_Reserva_Hidraulica_Datos_15'},
{nombre: 'Guadalquivir', id: '#btnMod_Reserva_Hidraulica_Datos_5'}, {nombre: 'Cuenca Mediterránea Andaluza', id: "#btnMod_Reserva_Hidraulica_Datos_6"}]
//Solo utilizar este metodo si la tabla watershed esta vacia.
// embalse.añadirCuencas(cuenca);
for(let anho of year){
for(let mes of month){
for(let agua of cuenca){
await page.goto('http://eportal.miteco.gob.es/BoleHWeb/');
await page.type('#year' , anho );
await page.type('#month', mes);
await page.click( day);
await page.waitForSelector('#btnMnuReserva');
await page.click('#btnMnuReserva');
await page.waitForSelector(agua.id);
await page.click(agua.id);
await page.waitForSelector('td.tdfondosinbordes');
const elements = await page.evaluate(()=> {
let textos = [];
const td = document.querySelectorAll("td.tdfondosinbordes");
for ( let texto of td){
textos.push(texto.innerText);
}
return textos;
});
await page.waitForSelector('td.tdblancosinbordesletraazul');
const elem = await page.evaluate(()=> {
let textos = [];
const td = document.querySelectorAll("td.tdblancosinbordesletraazul");
for ( let texto of td){
textos.push(texto.innerText);
}
return textos;
});
const indicador = elements.findIndex(element => element == 'Guadiato' )
if(indicador !== -1){
elements.splice(indicador + 1,0,'Cala');
}
let nombreEmbalse =[];
// console.log(elements);
function filtrarNombres(nombres, array){
const arrayFiltrado = array.filter(numero => isNaN(numero));
for(let i = 0 ; i < arrayFiltrado.length ; i++){
if(i % 2 == 0){
nombres.push(arrayFiltrado[i]);
}
}
return nombres;
}
//console.log(filtrarNombres(nombreEmbalse, elements));
const nombre = filtrarNombres(nombreEmbalse, elements);
const datos = elem.slice(0, nombre.length)
//console.log(datos);
function realizarObjeto(nom, dat) {
let infoTotal = [];
let posicion = 0;
for(let i = 0 ; i < dat.length; i++){
let historico = {}
historico.nombre = nom[i];
historico.data = dat[posicion].trim();
historico.fecha = anho;
historico.mes = mes;
historico.cuenca = agua.nombre;
posicion++;
infoTotal.push(historico)
}
return infoTotal;
}
console.log(realizarObjeto(nombre, datos));
//let objeto = realizarObjeto(nombre, datos);
//embalse.añadirHistorico(objeto);
}
}
}
await page.screenshot({path: 'amanzon1.jpg'});
//cerramos el programa
await browser.close();
})();
----------------------------------- --------------------------
await page.waitForSelector('td.tdfondosinbordes');
const elements = await page.evaluate(()=> {
let textos = [];
const td = document.querySelectorAll("td.tdfondosinbordes");
for ( let texto of td){
textos.push(texto.innerText);
}
return textos;
});
这是用于从图像中获取信息的函数。 在网站的控制台上,我得到了所有信息。但是,当我每次运行代码时都在.Js 中执行此操作时,我只能获得一半的信息,而且它永远不会相同,它会有所不同。 我试过 Page.$$eval 和其他方法,但我从来没有得到所有的信息。
【问题讨论】:
标签: javascript node.js puppeteer