ReferenceError: il documento non è definito anche se sto usando il burattinaio

Sep 07 2020

Come puoi vedere, ho aggiunto il burattinaio e ricevo sempre l'errore. Sto cercando di utilizzare la funzione getElementById per manipolare il mio front-end html.

const puppeteer = require('puppeteer');

(async function getPrice(){

let URL= 'https://www.coingecko.com/en/coins/synthetix-network-token';
let browser = await puppeteer.launch();
let page = await browser.newPage();
await page.goto(URL, {waitUntil: 'networkidle2'});

let data = await page.evaluate(() => {

    try {
    let price=document.querySelector('div[class="text-3xl"] > span').innerText;

        return {
           price
        }
    
    }catch(err) {
    reject(err.toString());
    }})


console.log(Object.values(data));
document.getElementById("snxprice").innerHTML = Object.values(data);
await browser.close();


}().catch(function(error) {
    console.error('Document is not defined!');
    process.exit();
});

Risposte

1 theDavidBarton Sep 07 2020 at 17:17

Questa riga: document.getElementById("snxprice").innerHTML = Object.values(data);non è valida in burattinaio.

Devi usare page.evaluateogni volta che hai bisogno del documento DOM (devi valutare il contesto della pagina), qualcosa del genere:

await page.evaluate(data => {
    const element = document.querySelector('#snxprice')
    element.innerHTML = Object.values(data)
 }, data)

Nota: #snxprice molto probabilmente si trova all'interno di un iframe poiché il burattinaio non è in grado di trovarlo nella pagina. Quindi ciò di cui avrai bisogno alla fine è frame.evaluate .