Как настроить браузер кукловода на переменную? - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь запустить один браузер и использовать его по мере необходимости, но я не знаю, как установить его в переменную.

// return promise
puppeteer.launch()

this:

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

this:

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

}
bro.newPage();

Скажите, пожалуйста, как запустить браузер один раз и использовать его по мере необходимости:

//
let bro
// launch browser
bro.newPage()
...

Например, в реакции я могу вызвать асинхронную функцию

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

установите результат в переменную и используйте его по мере необходимости

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Пожалуйста, попробуйте {} в функции стрелки

// Try
let bro;
puppeteer.launch()
    .then(res => {bro = res});

Или

// Try
const handleRes = (res) => {
    // do something with res here
}
puppeteer.launch()
    .then(handleRes);
0 голосов
/ 11 июня 2018

Я попробовал вашу первую версию вашего кода, т.е.

let bro;
puppeteer.launch()
    .then(res => bro = res);

, и он работает, ТОЛЬКО после использования ключевого слова await вроде

let bro;
await puppeteer.launch()
    .then(res => bro = res);

Вот как работает мой код

async function run(){
    let bro;
    await puppeteer.launch()
    .then(res => bro = res);

    const page = await bro.newPage();
    await page.goto('https://github.com/login');
    await bro.close();
}
run();

Другая версия того же кода

let bro;
    await puppeteer.launch()
                   .then(async browser => {
                    bro = browser;
                   });

Дайте мне знать, если это работает.

Версия 2 Поскольку среда узла асинхроннавам нужно будет изменить способ вызова функций и передачи переменных.Вот новый код, где браузер varable доступен вне run ().

var bro;
async function run(){
    await puppeteer.launch()
    .then(res => bro = res);

    const page = await bro.newPage();
    await page.goto('https://github.com/login');

}

//another function
async function another(){
    console.log('2')
    const page = await bro.newPage();
    await page.goto('https://github.com');
    await bro.close();
}
run().then(() => another());

NOTE закройте браузер, используя bro.close() в последней функции, которую вы используете в

0 голосов
/ 04 июня 2018

Это довольно просто, если вы используете async/await:

const browser = await puppeteer.launch();
const page = await browser.newPage();

ПРИМЕЧАНИЕ : оберните его внутри функции async.

В основном puppeteer.launch() возвращает обещание, которое разрешается для экземпляра браузера.Таким образом, вы можете просто инициализировать переменную , как указано выше, чтобы получить browser .Думаю, с 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();
            });
        });
    });
});

Вы также можетеобратитесь к API Puppeteer .Документация очень хорошая с примерами.Надеюсь, это поможет.

Редактировать 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();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...