如何将puppeteer浏览器设置为变量?

asa*_* kL 8 javascript puppeteer

我尝试启动一个浏览器并根据需要使用它,但我不知道如何将其设置为变量.

// return promise
puppeteer.launch()
Run Code Online (Sandbox Code Playgroud)

这个 :

// It's not working
let bro;
puppeteer.launch()
    .then(res => bro = res);
Run Code Online (Sandbox Code Playgroud)

这个:

//It's not working too
let bro;
puppeteer.launch()
    .then(res => bro = res);
while (bro === undefined) {

}
bro.newPage();
Run Code Online (Sandbox Code Playgroud)

请告诉我如何启动浏览器并根据需要使用它:

//
let bro
// launch browser
bro.newPage()
...
Run Code Online (Sandbox Code Playgroud)

例如,在react中我可以调用异步函数

axios.post("/postOnePage", data)
                    .then(res => {
                        this.setState({onePageCount: res.data.wordCount});
                    })
                    .catch(err => console.log(err))
Run Code Online (Sandbox Code Playgroud)

将结果设置为变量并根据需要使用它

may*_*495 6

如果你使用的话,它非常简单async/await

const browser = await puppeteer.launch();
const page = await browser.newPage();
Run Code Online (Sandbox Code Playgroud)

注意将其包装在async函数内。

基本上puppeteer.launch()返回一个解析为浏览器实例的承诺。所以你可以简单地像上面那样初始化一个变量来获取浏览器。我想then这会有点混乱,你必须在then街区内工作。

const browser = puppeteer.launch();
browser.then((brw) => {
    const page = brw.newPage();
    page.then(pg => {
        pg.goto('https://example.com').then(() => {
            pg.screenshot({
                path: 'example.png'
            }).then(() => {
                brw.close();
            });
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

您还可以参考Puppeteer API。该文档带有示例,非常好。希望它能进一步有所帮助。

编辑1:
示例工作示例:

const puppeteer = require('puppeteer');

async function getScreenshot(page) {
    await page.screenshot({
        path: 'exampleShot.png'
    });
}

async function newPageAndScreenshot(browser) {
    const page = await browser.newPage();
    await page.goto('https://www.github.com');
    await page.screenshot({
        path: 'github.png'
    });
    //you can also call getScreenshot here.
    //await getScreenshot(page);
}

async function run() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://example.com');
    await getScreenshot(page);
    await newPageAndScreenshot(browser);
    //Some other function calls may be.
    browser.close();

}

run();
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。