Estoy usando Node JS, aquí está el código
import fetch from 'node-fetch'; import { JSDOM } from 'jsdom'; import {Appartment} from "./models/Appartment.mjs" let applist = [] let multipleDivs = [] async function kijAppartments() { try { const kijCall = await fetch(`https://www.kijiji.ca/b-ville-de-montreal/appartement-4-1-2/k0l1700281?rb=true&dc=true`); if(!kijCall.ok) { throw new Error ( `HTTP error: ${kijCall.status}` ) } const response = await kijCall.text() const dom = new JSDOM(response) multipleDivs = dom.window.document.querySelectorAll(".info-container") // console.log(multipleDivs) return multipleDivs } catch(error) { console.log("Error Made") console.log(error) } } async function arrayOfApps() { await kijAppartments() .then(data => { data.forEach(div => { const newApp = new Appartment newApp.price = div.childNodes[1].innerText newApp.title = div.childNodes[3].innerText newApp.description = div.childNodes[7].innerText console.log(newApp) }) }) } await arrayOfApps() Si ingresa a este enlace e intenta lo siguiente const aList = document.querySelectorAll(".info-container") , obtiene acceso a todos los nodos, innerHTML e innerText, todo funciona y le da acceso al valor real, pero para algunos razón, cuando trato de ejecutar este código en la terminal, el valor de todos mis objetos no está definido.
Debe usar textContent en lugar de innerText .
Aquí está mi solución:
const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args)); const jsdom = require('jsdom'); const { JSDOM } = jsdom; class Appartment { price title description location } let multipleDivs = [] const appartments = [] function trim(text){ return text.replace(/(\r\n|\n|\r)/gm, "").trim() } async function fetchKijijiAppartments() { const url = `https://www.kijiji.ca/b-ville-de-montreal/appartement-4-1-2/k0l1700281?rb=true&dc=true` try { const kijijiRes = await fetch(url); if (!kijijiRes.ok) { throw new Error( `HTTP error: ${kijijiRes.status}` ) } const response = await kijijiRes.text() // console.log("DB: ", response) const dom = new JSDOM(response) multipleDivs = dom.window.document.querySelectorAll(".info-container") //console.log("DB: " multipleDivs) return multipleDivs } catch (error) { console.log("Error Made") console.log(error) } } async function scrapeAppartments() { await fetchKijijiAppartments() .then(data => { data.forEach(div => { const appartement = new Appartment appartement.price = trim(div.querySelector(".price").textContent) appartement.title = trim(div.querySelector(".title").textContent) appartement.description = trim(div.querySelector(".description").textContent) console.log("DB: ", appartement) appartments.push(appartement) }) }) } scrapeAppartments()