175 votes

Marionnettiste : passer la variable à .evaluate()

Je suis en train de passer une variable en page.evaluate() fonction dans Marionnettiste, mais quand j'utilise la suite très simplifiée exemple, la variable evalVar n'est pas défini.

Je suis nouveau sur Marionnettiste et impossible de trouver des exemples pour construire, donc j'ai besoin d'aide pour passer cette variable en la page.evaluate() fonction donc je peux 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();

  }

})();

252voto

flozia Points 1128

Vous devrez passer la variable en tant qu’argument à la `` comme ceci :

Les arguments peuvent également être sérialisées : https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pageevaluatepagefunction-args.

76voto

vandad Points 119

Je vous encourage à rester sur ce style, parce que c’est plus pratique et plus lisible.

51voto

Grant Miller Points 6261

Seule Variable:

Vous pouvez passer une variable d' page.evaluate() à l'aide de la syntaxe suivante:

await page.evaluate(example => { /* ... */ }, example);

Remarque: Vous n'avez pas besoin de joindre la variable en (), à moins que vous allez passer plusieurs variables.

Plusieurs Variables:

Vous pouvez passer plusieurs variables d' page.evaluate() à l'aide de la syntaxe suivante:

await page.evaluate((example_1, example_2) => { /* ... */ }, example_1, example_2);

Remarque: en Joignant votre des variables au sein d' {} n'est pas nécessaire.

16voto

harrrrrrry Points 1483

Il m'a fallu un moment pour comprendre que c' console.log() en evaluate() peut pas afficher dans le nœud de la console.

Ref: https://github.com/GoogleChrome/puppeteer/issues/1944

tout ce qui est exécuté à l'intérieur de la page.fonction d'évaluation est effectué dans le contexte de la page du navigateur. Le script est en cours d'exécution dans le navigateur de ne pas en node.js donc, si vous vous connectez, il s'affichera dans le navigateur de la console qui, si vous êtes en cours d'exécution sans tête, vous ne verrez pas. Vous aussi vous ne pouvez pas définir un nœud de point d'arrêt à l'intérieur de la fonction.

J'espère que cela peut aider.

6voto

wolf Points 21

Pour passer une `` , vous pouvez le faire de deux façons.

Vous pouvez ajouter des `` les options de lancement pour test

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X