次のスクリプトは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を無効にするためです。
#1668で報告されているように、ページがwindow.Node
再定義すると、 page.click(selector)
は機能しません。
この問題の名前を、「ページが組み込みのグローバルオブジェクトを再定義すると、Puppeteerメソッドが機能しなくなる」などのより一般的な名前に変更することをお勧めします。
この種のことは、図書館レベルで回避することさえ可能ですか? 私は自分のコードでこれを行いましたが、これは問題なく機能しているようです:
await this.page.evaluate( () => {
if ( ! window.Node ) {
window.Node = {};
}
if ( ! Node.ELEMENT_NODE ) {
Node.ELEMENT_NODE = 1;
}
} );
この問題に関する更新はありますか?
最も参考になるコメント
この問題の名前を、「ページが組み込みのグローバルオブジェクトを再定義すると、Puppeteerメソッドが機能しなくなる」などのより一般的な名前に変更することをお勧めします。
この種のことは、図書館レベルで回避することさえ可能ですか? 私は自分のコードでこれを行いましたが、これは問題なく機能しているようです: