Soru Kuklacı: .evaluate () değişkenini geçir


Bir değişkeni bir page.evaluate() işlevi kuklacıyaancak aşağıdaki çok basitleştirilmiş örneği kullandığımda, değişken evalVar tanımlanmamış.

Ben Puppeteer için yeniyim ve üzerine inşa edilecek herhangi bir örnek bulamıyorum, bu yüzden bu değişkeni page.evaluate() Fonksiyon böylece içeride kullanabilirim.

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();

  }

})();

25
2017-09-07 05:17


Menşei




Cevaplar:


Değişkeni argüman olarak geçirmelisiniz. pageFunction bunun gibi:

const links = await page.evaluate((evalVar) => {

  console.log(evalVar); // should be defined now
  …

}, evalVar);

Argümanlar ayrıca serileştirilebilir: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pageevaluatepagefunction-args.


44
2017-09-07 14:04



Teşekkürler, bitti :) Çok takdir! - Cat Burston
Merhaba, birden çok değişken nasıl geçersiniz? - chitzui
Ayrıca, bir işlevi gerçekten geçemiyorum: var myFunction = function () {console.log ("merhaba")}; page.evaluate'i bekliyoruz (func => func (), myFunction); bana verir: Evaluation failed: TypeError: func is not a function.. Niye ya? - chitzui


Bu stile yapışmanızı tavsiye ederim çünkü daha çok uygun ve okunabilir.

let name = 'jack';
let age  = 33;
let location = 'Berlin/Germany';

await page.evaluate(({name, age, location}) => {

    console.log(name);
    console.log(age);
    console.log(location);

},{name, age, location});

8
2017-12-01 17:07





Tek Değişkenli:

Geçebilirsin bir değişken için page.evaluate() Aşağıdaki sözdizimini kullanarak:

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

Not: Değişkeni içine almanız gerekmez ()Birden çok değişkeni geçmeyecekseniz.

Çoklu Değişkenler:

Geçebilirsin çoklu değişken için page.evaluate() Aşağıdaki sözdizimini kullanarak:

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

Not: Değişkenlerinizin içine alan {} gerekli değil.


0
2017-08-24 23:03