Esta es la contestación más correcta que encomtrarás aportar, pero primero obsérvala detenidamente y analiza si es compatible a tu trabajo.
Solución:
$x()
no es un método estándar de JavaScript para seleccionar elementos por XPath. $x()
es solo un ayudante en Chrome devtools. Afirman esto en la documentación:
Nota: esta API solo está disponible desde la propia consola. No puede acceder a la API de línea de comandos desde los scripts de la página.
Y page.evaluate()
se trata aquí como “guiones en la página”.
Tienes dos opciones:
- Usar
document.evaluate
Aquí hay un ejemplo de selección de elemento (artículo destacado) dentro page.evaluate()
:
const puppeteer = require('puppeteer');
(async () =>
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://en.wikipedia.org', waitUntil: 'networkidle2' );
const text = await page.evaluate(() =>
// $x() is not a JS standard -
// this is only sugar syntax in chrome devtools
// use document.evaluate()
const featureArticle = document
.evaluate(
'//*[@id="mp-tfa"]',
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
)
.singleNodeValue;
return featureArticle.textContent;
);
console.log(text);
await browser.close();
)();
- Seleccionar elemento por Titiritero
page.$x()
y pásalo apage.evaluate()
Este ejemplo logra los mismos resultados que en el ejemplo 1.:
const puppeteer = require('puppeteer');
(async () =>
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://en.wikipedia.org', waitUntil: 'networkidle2' );
// await page.$x() returns array of ElementHandle
// we are only interested in the first element
const featureArticle = (await page.$x('//*[@id="mp-tfa"]'))[0];
// the same as:
// const featureArticle = await page.$('#mp-tfa');
const text = await page.evaluate(el =>
// do what you want with featureArticle in page.evaluate
return el.textContent;
, featureArticle);
console.log(text);
await browser.close();
)();
Aquí hay una pregunta relacionada con cómo inyectar $x()
función auxiliar para sus scripts.
Te mostramos comentarios y calificaciones
Tienes la opción de añadir valor a nuestro contenido informacional colaborando tu experiencia en las acotaciones.