我有一些问题,当我使用代理与 puppet 库。
这是类定义
const puppeteer = require("puppeteer");
class CustomPage {
static async build() {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
const customPage = new CustomPage(page);
const superPage = new Proxy(customPage, {
get: function (target, property) {
//pay attention to the order between browser and page because of an issue
return customPage[property] || browser[property] || page[property];
}
});
console.log("superPage in CustomPage class definition", superPage);
return superPage;
}
constructor(page) {
this.page = page;
}
}
module.exports = CustomPage;
这是我运行它时得到的错误
TypeError: Cannot read private member from an object whose class did not declare it
7 | beforeEach(async () => {
8 | page = await Page.build();
> 9 | await page.goto("localhost:3000");
| ^
10 | });
你能帮我一下吗?
2条答案
按热度按时间2ledvvac1#
看起来
goto
函数调用了一些像#someProperty
这样声明为私有的属性。代理和私有属性不能一起工作。这就是问题所在:https://github.com/tc39/proposal-class-fields/issues/106
简而言之,你必须放弃使用其中之一的想法:代理或私有属性。在您的情况下,由于私有属性是Puppeteer的一部分,您将不得不放弃代理。我认为它可以用 Package 器代替。
pxyaymoc2#
如果有人不想放弃代理,我想出了一个可行的方法(大概在大多数情况下不能代表所有人)。
也许这就是他说的“一些 Package ”?不确定。到目前为止对我很有效。