2017-10-19 7 views
0

私はをPuppeteerに使用していますが、なぜオブジェクトが空でない場合にpageFunctionが空のオブジェクトを返すのかわかりません。コードサンプルは次のとおりです。pagefunction in Puppeteer空のオブジェクトを返します

const puppeteer = require('puppeteer'); 

(async() => { 
    const browser = await puppeteer.launch({ 
    headless: false, 
    slowMo: 1000 
    }); 
    const page = await browser.newPage(); 
    await page.goto('https://www.google.com/search?q=news'); 

    const result1 = await page.$eval('#resultStats', elem => elem.textContent) 
    console.log('result1', result1); // returns 'About 2,890,000,000 results (0.45 seconds)'. This is expected behavior straight from puppeeteer docs 

    const result2 = await page.$eval('#resultStats', elem => elem) 
    console.log('result2', result2); // returns and empty object. Why? I would have expected to see a DOM Node Object here 

    await browser.close(); 
})(); 

result2に要素全体を戻すにはどうすればよいですか?

答えて

0

関数がChromium自体で実行されていることを理解できませんでした。したがって、elem => elemを返す2番目の例では、実際にはNodeListコレクションがPuppeteerに返されています。

しかし、PuppeteerがChromiumとの間でデータをやりとりする方法は、JSON.stringify/JSON.parseでシリアル化可能であるため、Chromiumから生きたNodeListコレクションをPuppeteerに戻すことはできません。 PuppeteerがライブNodeListにJSON.stringifyを実行すると、空のオブジェクトが返されると思います。

0

あなたが評価関数でdomノードを取得できます。しかし、評価関数からdomノードを返すと、puppeteerは返されたデータを処理します。したがって、形容詞データを取得することはできません。

関連する問題