Я новичок в Puppeteer и JavaScript. Я пытаюсь автоматизировать некоторые простые задачи, только чтобы элементы появлялись внутри фреймов - но я решил это. Что мне неясно, так это исключение, которое выдается, когда я раскомментирую await browser.close()
.
Мой код:
const baseUrl = "https://test-environment.com/ABH2829.html?token=dhdj7s8383937hndkeie8j3jebd";
const puppeteer = require('puppeteer');
const expect = require('chai').expect;
const clickClothingButton = async () => {
try {
const browser = await puppeteer.launch({
headless: false,
slowMo: 250,
});
const page = await browser.newPage();
await page.setViewport({width: 1280, height: 800});
process.on('unhandledRejection', (reason, p) => {
console.error('Unhandled Rejected at: Promise', p, 'reason:', reason);
browser.close();
});
await page.goto(baseUrl, {waitUntil: 'networkidle2'});
const navigationPromise = page.waitForNavigation({timeout: 3000});
await page.waitForSelector('.widget-title');
const frame = page.frames().find(frame => frame.name() === 'iframe');
const clothingButton = await frame.$('#clothing-button');
clothingButton.click();
await navigationPromise;
await browser.close();
} catch (error) {
console.log(error);
throw new Error(error);
}
};
clickClothingButton();
Теперь все работает нормально, но я всегда получаю следующее:
Unhandled Rejected at: Promise Promise {
<rejected> Error: TimeoutError: Navigation Timeout Exceeded: 3000ms exceeded
Если я попытаюсь просто:
await browser.close();
Тогда он возражает:
Unhandled Rejected at: Promise Promise {
<rejected> { Error: Protocol error (Runtime.callFunctionOn): Target closed.
Какой лучший способ справиться с этим изящно, и почему я не могу просто закрыть браузер? Помните, что я все еще изучаю Обещания и контракты, которые должны быть выполнены для них.