Javascript/Node.js中的嵌套类实例

我使用的是操纵chrome的NodeJS模块的puppeteer。Javascript/Node.js中的嵌套类实例

它有2个功能来启动一个新的浏览器和一个新的页面。

const的浏览器=等待puppeteer.launch()和browser.newPage()

我想创建一个类来创建一个新的一页,新的浏览器。

这是我这样做的旧方式,没有类,它的工作原理,但它不允许我创建新的页面。这就是为什么我想转移到使用类。

let chrome = {} 

chrome.init = async (options) => {

chrome.browser = await puppeteer.launch(options)

chrome.page = await chrome.browser.newPage()

}

chrome.pageContains = async (string) => {

return await chrome.page.evaluate((string) => {

const regex = new RegExp(string, 'i')

return regex.test(document.querySelector('body').innerText)

}, string)

}

module.exports = chrome

这是我的新代码,但我不知道我在做什么,这显然是错误的,并没有任何意义。

chrome.init = async (options) => { 

return {browser: await new Chrome(options)

}

class Chrome {

async constructor(options) {

this.browser = await puppeteer.launch(options)

}

newPage() {

return await this.browser.newPage()

}

}

class Page {

async constructor() {

this.page = await chrome.browser.newPage()

}

}

那么,如何让我的旧代码使用类而不是对象工作?

回答:

你有一些错字和构造函数不是异步的。

除此之外,您只需将正确的浏览器功能传递给Page类。您可以使用页面扩展Chrome并使用super,或将它们保持分开,但该页面在某个时刻必须可以访问浏览器。

首先,我们将启动浏览器并将其返回。等待会照顾承诺。

const puppeteer = require('puppeteer'); 

class Chrome {

constructor(options) {

this.browser = puppeteer.launch(options);

return this.browser;

}

}

然后我们将它传递给页面构造函数并从那里使用它。

class Page { 

constructor(browser) {

this.browser = browser;

this.page = browser.newPage();

return this.page;

}

async pageContains(string){

return await this.browser.page.evaluate((string) => {

const regex = new RegExp(string, 'i')

return regex.test(document.querySelector('body').innerText)

}, string)

}

}

然后,我们称它们并使它们可用。并根据需要返回浏览器和页面对象。

const getChrome = async (options) => { 

const browser = await new Chrome(options);

const page = await new Page(browser);

return { browser, page }

}

现在我们可以使用它们。

(async()=>{ 

const page = (await getChrome({headless: false})).page;

await page.goto('http://example.com');

})()

我敢肯定它可以进行重构和我写在这里是不是最好的做法,但是这将让你去。

以上是 Javascript/Node.js中的嵌套类实例 的全部内容, 来源链接: utcz.com/qa/263576.html

回到顶部