J'essaie de passer une variable dans une page.evaluate()
fonction dans Puppeteer , mais lorsque j'utilise l'exemple très simplifié suivant, la variable evalVar
n'est pas définie.
Je suis nouveau sur Puppeteer et je ne trouve aucun exemple sur lequel s'appuyer, j'ai donc besoin d'aide pour transmettre cette variable dans la page.evaluate()
fonction afin de pouvoir l'utiliser à l'intérieur.
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
const evalVar = 'WHUT??';
try {
await page.goto('https://www.google.com.au');
await page.waitForSelector('#fbar');
const links = await page.evaluate((evalVar) => {
console.log('evalVar:', evalVar); // appears undefined
const urls = [];
hrefs = document.querySelectorAll('#fbar #fsl a');
hrefs.forEach(function(el) {
urls.push(el.href);
});
return urls;
})
console.log('links:', links);
} catch (err) {
console.log('ERR:', err.message);
} finally {
// browser.close();
}
})();
javascript
web-scraping
evaluate
puppeteer
Chat Burston
la source
la source
Evaluation failed: TypeError: func is not a function
.. Pourquoi?evalVar
fois la signature de l'argument de la fonction et en tant qu'argument passé àevaluate
(à la fin de l'exemple de code).pate.evaluate()
. Vous pouvez supposément «l'exposer» avecpage.exposeFunction
. Pour plus d'informations, consultez stackoverflow.com/a/58040978 .Je vous encourage à vous en tenir à ce style, car il est plus pratique et plus lisible .
la source
Variable unique:
Vous pouvez passer une variable à l'
page.evaluate()
aide de la syntaxe suivante:Variables multiples:
Vous pouvez transmettre plusieurs variables à l'
page.evaluate()
aide de la syntaxe suivante:la source
Il m'a fallu un certain temps pour comprendre que
console.log()
dansevaluate()
ne peut pas s'afficher dans la console du nœud.Réf: https://github.com/GoogleChrome/puppeteer/issues/1944
J'espère que cela peut vous aider.
la source
Pour passer a
function
, il y a deux façons de le faire.Vous pouvez ajouter
devtools: true
aux options de lancement pour le testla source
yourFunc
par un objet si votre propriété n'est pas une fonction. @tramadaJ'ai un exemple dactylographié qui pourrait aider quelqu'un de nouveau en tapuscrit.
la source
puppeteer
en tapuscrit? Transpilez-vous en js chaque fois que vous modifiez votre code?Avec page. $$ eval
[voir aussi à la page. $ eval pour un seul sélecteur]
la source