Error no capturado: Evaluación fallida: ReferenceError: lineBaseSelector no está definido.
(async () => {
await global.initialize();
let lineCount = await global.count();
let globalData = [];
let childNum = null;
let lineBaseSelector = null;
for(let i = 1; i < lineCount; i++)
{
childNum = i + 1;
lineBaseSelector = '#alx-content > div.row-fluid.TopSites.AlexaTool.padding20 > section.page-product-content.summary.padding20 > span > span > div > div > div > div:nth-child(' + `${childNum}` + ')';
let details = await global.getDetails(lineBaseSelector);
globalData.push(details);
}
global.js
getDetails: async (lineBaseSelector) => {
let url = await page.url();
await page.waitForSelector(lineBaseSelector);
let details = await page.evaluate(() => {
return {
rank: document.querySelector('div[class="td"]').innerText,
name: document.querySelector('p > a').innerText,
url: document.querySelector('p > a').getAttribute('href')
}
});
return details;
},
El selector “lineBaseSelector” cambia dinámicamente y quiero obtener todos los datos que pertenecen a estos selectores como una lista. Pero la lista de datos que obtengo consiste solo en el primer dato. Hay 50 datos pero solo puedo obtener el primero 50 veces. También intenté cambiar el querySelector a “”rank: document.querySelector(lineBaseSelector + ‘div[class=”td”]’).innerText,“”, pero tuve un error llamado Uncaught Error: Evaluation failed: ReferenceError: lineBaseSelector is not defined. Por favor, ayúdame a resolver esto. Muchas gracias.
davy.ai
El problema parece ser que la variable
lineBaseSelector
no se está pasando correctamente a la funciónevaluate()
. Una solución podría ser pasarla como argumento a la función, de esta manera:De esta forma, la variable
lineBaseSelector
se pasa como argumentoselector
a la funciónevaluate()
, y se puede utilizar para seleccionar dinámicamente los elementos.Alternativamente, también podrías intentar usar interpolación de cadenas para concatenar directamente la variable
lineBaseSelector
en los métodosquerySelector()
, de la siguiente manera:De esta forma, la variable
lineBaseSelector
se interpola directamente en los métodosquerySelector()
utilizando las comillas invertidas y la sintaxis${}
.¡Prueba una de estas soluciones y ve si resuelven tu problema!