Estoy tratando de raspar la parte de características clave del sitio web con la URL de: "https://www.alpinestars.com/products/stella-missile-v2-1-piece-suit-1" usando titiritero - sin embargo, siempre que Trato de usar un selector que funciona en la consola de Chrome para el sitio web, la salida de mi código siempre es una matriz u objeto vacío. Por ejemplo, tanto document.querySelectorAll("#clave\características > p") como document.getElementById('características clave') regresan como matrices u objetos vacíos cuando lo envío a través de mi código pero trabajo a través de la consola de Chrome.
He adjuntado mi código a continuación:
const puppeteer = require('puppeteer'); async function getDescripData(url) { const browser = await puppeteer.launch({headless: true}); const page = await browser.newPage(); await page.goto(url); const descripFeatures = await page.evaluate(() => { const tds = Array.from(document.getElementById('key features')) console.log(tds) return tds.map(td => td.innerText) }); console.log(descripFeatures) await browser.close(); return { features: descripFeatures } }¿Cómo debo proceder para superar este problema?
¡Gracias por adelantado!
Su problema está en Array.from . from está pasando un objeto no iterable y devuelve null .
Esto funciona para mí:
const puppeteer = require('puppeteer'); const url = 'https://www.alpinestars.com/products/stella-missile-v2-1-piece-suit-1'; (async () => { const browser = await puppeteer.launch({ headless: false, defaultViewport: null, args: ['--start-maximized'], devtools: true }); const page = (await browser.pages())[0]; await page.goto(url); const descripFeatures = await page.evaluate(() => { const tds = document.getElementById('key features').innerText; return tds.split('• '); }); console.log(descripFeatures) await browser.close(); })();