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

246
Views
Nodo JS: Error: la evaluación falló: TypeError: no se pueden leer las propiedades de nulo (leyendo 'innerText')

Mi código funcionaba y el error: Error: la evaluación falló: TypeError: no se pueden leer las propiedades de nulo (leyendo 'innerText') regresó. no entiendo porque Intento obtener el texto contenido en las etiquetas y enviarlo en un documento JSON Aquí está mi código:

 const scraperObject = { url: 'https://stockx.com/fr-fr/dior-b713-cactus-jack-mocha', async scraper(browser){ let page = await browser.newPage(); console.log(`Navigating to ${this.url}...`); await page.goto(this.url); await page.waitForSelector('#onetrust-reject-all-handler'); await page.click('#onetrust-reject-all-handler'); const result = await page.evaluate(() => { let demandes = document.querySelector('#main-content > div > section:nth-child(3) > div.css-gg4vpm > div.css-0 > div.css-qt7qal > div.chakra-stack.css-1g42e87 > div > a.chakra-button.css-2zzyy5 > p').innerText; let offres = document.querySelector('#main-content > div > section:nth-child(3) > div.css-gg4vpm > div.css-0 > div.css-qt7qal > div.chakra-stack.css-1g42e87 > a > p').innerText; return {demandes, offres} }) console.log(result); browser.close() return result } } module.exports = scraperObject;

Esto es lo que se mostró en mi archivo JSON cuando se estaba ejecutando el código:

{"demandes":"Acheter à 1 365 €","offres":"Vendre a 784 € ou demander plus"}

Mi JSON se controla en este archivo "pageController":

 const pageScraper = require('./pageScraper'); const fs = require('fs'); async function scrapeAll(browserInstance){ let browser; try{ browser = await browserInstance; const scrapedData = await pageScraper.scraper(browser) fs.writeFile("data.json", JSON.stringify(scrapedData), 'utf8', function(err) { if(err) { return console.log(err); } console.log("The data has been scraped and saved successfully! View it at './data.json'"); }); console.log(scrapedData) } catch(err){ console.log("Could not resolve the browser instance => ", err); } } module.exports = (browserInstance) => scrapeAll(browserInstance)

y no se como modificarlo

Gracias por adelantado

about 4 years ago · Santiago Gelvez
1 answers
Answer question

0

No soy un gran admirador de esos selectores masivos generados por navegador. Si solo cambia una clase o elemento en la cadena, todo se rompe.

Más fácil que jugar con el DOM es interceptar la respuesta que contiene los datos JSON:

 const fs = require("fs").promises; const puppeteer = require("puppeteer"); // ^15.4.0 let browser; (async () => { browser = await puppeteer.launch(); const [page] = await browser.pages(); const ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"; await page.setUserAgent(ua); const url = "https://stockx.com/fr-fr/dior-b713-cactus-jack-mocha"; const responseP = page.waitForResponse(async response => { if (response.url() === "https://stockx.com/api/p/e") { const payload = await response.json(); return payload?.data?.product?.market?.bidAskData; } }); await page.goto(url, {waitUntil: "domcontentloaded"}); const result = await (await responseP).json(); await fs.writeFile("result.json", JSON.stringify(result, null, 2)); console.log(result.data.product.market.bidAskData); })() .catch(err => console.error(err)) .finally(() => browser?.close()) ;

Producción:

 { highestBid: 803, // vendre / offres highestBidSize: '43', lowestAsk: 1332, // acheter / demandes lowestAskSize: '42', __typename: 'BidAskData' }

Mis números son un poco diferentes a los tuyos ya que estoy en los Estados Unidos.

Esto no tiene el texto elegante, pero eso probablemente le ahorra un paso.

about 4 years ago · Santiago Gelvez 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!