通常我会用
await page.evaluateOnNewDocument(my_js_code);
其中my_js_code类似于:Object.defineProperty(HTMLCanvasElement.prototype, "toBlob", ...
但是问题是,在此之后代码变得可见console.log(HTMLCanvasElement.prototype.toBlob.toString());
使用 native 函数时,代码不可见,toString返回[native code]
,而不是实际代码因此,有没有一种方法可以让我用Pupeteer在更深层次上覆盖一个函数?
最佳答案
这个问题实际上与puppeteer无关,请尝试在chrome repl中运行您的代码(它将产生相同的结果)。 Object.defineProperty
不接受值作为第三个参数,而是“描述符”。我猜你把函数放在第三个参数中
Object.defineProperty(HTMLCanvasElement.prototype, "toBlob", () => {
console.log('toBlob!');
});
但它想要这样Object.defineProperty(HTMLCanvasElement.prototype, "toBlob", {
value: () => {
console.log('toBlob!');
}
});
对我有用的示例代码:https://gist.github.com/dralletje/37d0fc8a564ad377d60881d7c7429f6b