Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

128
Views
Titiritero no puede encontrar elementos cuando Headless TRUE

Estoy enfrentando algunos problemas con Puppeteer, quiero extraer una lista de elementos y tener éxito cuando headless es FALSO pero no cuando es VERDADERO.

Lo primero es lo primero, quiero obtener esos elementos antes de mapearlos.

Aquí está mi guión, tal vez puedas reproducirlo, es realmente básico.


 const chalk = require("chalk"); const baseUrl = "https://www.interencheres.com/recherche/lots?search="; const searchTerm = "Apple"; const searchUrl = baseUrl + searchTerm; (async () => { const browser = await puppeteer.launch({ headless: false, ignoreHTTPSErrors: true, args: [`--window-size=1920,1080`], defaultViewport: { width: 1920, height: 1080, }, }); const page = await browser.newPage(); // Begin navigation console.log(chalk.yellow("Beginning navigation.")); await page.goto(searchUrl); // Await List of elements; console.log(chalk.yellow("Wait for Network Idle...")); await page.waitForNetworkIdle(); // get Items const findElements = await page.evaluate(() => { const elements = document.querySelectorAll(".sale-item"); console.log(elements); return elements; }); console.log(findElements); console.log(chalk.blue("Waiting...")); await page.waitForTimeout(10000); await browser.close(); console.log(chalk.red("Closed.")); })();
 Expected results : { '0': { _prevClass: 'sale-item pa-1 col-sm-6 col-md-4 col-lg-3 col-12' }, '1': { _prevClass: 'sale-item pa-1 col-sm-6 col-md-4 col-lg-3 col-12' }, '2': { _prevClass: 'sale-item pa-1 col-sm-6 col-md-4 col-lg-3 col-12' }, '3': { _prevClass: 'sale-item pa-1 col-sm-6 col-md-4 col-lg-3 col-12' }, '4': { _prevClass: 'sale-item pa-1 col-sm-6 col-md-4 col-lg-3 col-12' }, . . }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Para empezar, prefiero page.waitForSelector(yourSelector) sobre page.waitForNetworkIdle(); . En la mayoría de los casos, es una garantía más directa de que los datos que desea están en la página, mientras que la inactividad de la red puede bloquear la espera de todo tipo de solicitudes que son totalmente irrelevantes para los datos que está tratando de extraer.

Algunos sitios web verifican los encabezados para bloquear los raspadores. Puede intentar agregar un encabezado de agente de usuario como se describe en el problema de Puppeteer GitHub Comportamiento diferente entre { sin cabeza: falso } y { sin cabeza: verdadero } # 665 :

 const puppeteer = require("puppeteer"); const baseUrl = "https://www.interencheres.com/recherche/lots?search="; const searchTerm = "Apple"; const searchUrl = baseUrl + searchTerm; let browser; (async () => { browser = await puppeteer.launch({headless: true}); const [page] = await browser.pages(); await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"); await page.goto(searchUrl); await page.waitForSelector(".sale-item"); const elements = await page.$$(".sale-item"); console.log(elements.length); // => 48 })() .catch(err => console.error(err)) .finally(() => browser?.close()) ;

Usando titiritero-extra como se describe en ¿Por qué headless necesita ser falso para que Titiritero funcione? es otra opción que puedes probar. También anonimiza los encabezados del agente de usuario.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!