2017-10-29 3 views
0

評価:page.evaluate()関数の内部にconsole.logはpupeteer内部で動作しません。次のコードを考慮すると機能

const puppeteer = require('puppeteer'); 

const run = async() => { 
    const browser = await puppeteer.launch(); 
    const page = await browser.newPage(); 
    await page.goto('https://www.facebook.com/pg/fotosdacurva/photos/?tab=albums', { waitUntil: 'networkidle' }); 

    const data = await page.evaluate(() => { 
     console.log("ola"); 

     const tds = Array.from(document.querySelectorAll('#content_container a')) 
     return tds.map(td => td.textContent) 
    }); 

    //console.log(data); 
    await page.screenshot({ path: 'example.png' }); 

    await browser.close(); 
}; 

run(); 

console.logが動作していないと私は理由を把握カント?私はそれが非同期の振る舞いに関連するかもしれないと思う。この関数は、「データ」変数が設定されているときに実行されています。

ありがとうございます。

+1

私の推測では、あなたが実際に開いている*ページで 'console.log'を実行して*表示されていないと思います。それはあなたが開いたページの上で実行されている – Li357

+0

ああ、それは完璧な意味をアンドリュー! – brpaz

答えて

0

あなたは、ページ上のコンソールイベントをリッスンし、その後、独自のコンソールに書き込むことができます。

const page = await browser.newPage(); 
page.on('console', console.log); 

それはまさにconsole.log()と同じではありませんが、それは便利です。

ConsoleMessage { 
    type: 'log', 
    text: 'ola', 
    args: 
    [ JSHandle { 
     _context: [Object], 
     _client: [Object], 
     _remoteObject: [Object], 
     _disposed: false } ] } 

https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#event-console

0

ブラウザのコンソールを聞きたい場合は、あなたは、単に人形遣いのコンソールイベントを使用することができます。それは次のように出力されます。例えば、自分のdocsからこの例を確認し、

page.on('console', msg => { 
    for (let i = 0; i < msg.args.length; ++i) 
    console.log(`${i}: ${msg.args[i]}`); 
}); 

それが何をするか毎回コンソールメッセージがある、ある、イベントがトリガされ、それがそのイベントをキャッチし、上のあなたのためのメッセージを印刷しますあなたのnodeJSコンソール。

DOM要素または配列を印刷すると、元のブラウザコンソールでは正しく表示されますが、nodeJSでは[オブジェクトオブジェクト]などのテキストが表示されることに注意してください。

関連する問題