Puppeteer: page.waitForSelectorはbaidu.comでは機能しません

作成日 2017年08月30日  ·  3コメント  ·  ソース: puppeteer/puppeteer

次のスクリプトはbaidu.comで失敗します。

const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://baidu.com');
  await page.waitForSelector('div');
  browser.close();
})();

その理由は、BaiduがwaitForSelector必要なMutationObserverを無効にするためです。

bug chromium

最も参考になるコメント

この問題の名前を、「ページが組み込みのグローバルオブジェクトを再定義すると、Puppeteerメソッドが機能しなくなる」などのより一般的な名前に変更することをお勧めします。

この種のことは、図書館レベルで回避することさえ可能ですか? 私は自分のコードでこれを行いましたが、これは問題なく機能しているようです:

await this.page.evaluate( () => {
    if ( ! window.Node ) {
        window.Node = {};
    }
    if ( ! Node.ELEMENT_NODE ) {
        Node.ELEMENT_NODE = 1;
    }
} );

全てのコメント3件

#1668で報告されているように、ページがwindow.Node再定義すると、 page.click(selector)は機能しません。

この問題の名前を、「ページが組み込みのグローバルオブジェクトを再定義すると、Puppeteerメソッドが機能しなくなる」などのより一般的な名前に変更することをお勧めします。

この種のことは、図書館レベルで回避することさえ可能ですか? 私は自分のコードでこれを行いましたが、これは問題なく機能しているようです:

await this.page.evaluate( () => {
    if ( ! window.Node ) {
        window.Node = {};
    }
    if ( ! Node.ELEMENT_NODE ) {
        Node.ELEMENT_NODE = 1;
    }
} );

この問題に関する更新はありますか?

このページは役に立ちましたか?
0 / 5 - 0 評価