Кукольник: Ошибка: контекст выполнения был уничтожен, скорее всего, из-за навигации.Javascript

Форум по Javascript
Ответить
Anonymous
 Кукольник: Ошибка: контекст выполнения был уничтожен, скорее всего, из-за навигации.

Сообщение Anonymous »

У меня проблема с этим кодом. Я использую Puppeter, и кажется, что он выдает ошибку:

"Ошибка: контекст выполнения был уничтожен, скорее всего, из-за
навигации".

Почему это могло произойти? Прикрепляю фрагмент своего кода, где он, похоже, дает сбой.

Код: Выделить всё

export async function goTo(page: Page, target1: string, target2: string) {
await common.click(page, '#nav-item-welcome');
await common.waitTillHTMLRendered(page);

await common.click(page, target1, { clickType: 'puppeteer' }); // clicktype puppeter or jquery
await common.waitTillHTMLRendered(page);

await common.click(page, target2, { clickType: 'puppeteer' });
await common.waitTillHTMLRendered(page);
}
Функция щелчка:

Код: Выделить всё

export async function click(el: Frame | Page, selector: string, options?: {
visible?: boolean;
hidden?: boolean;
timeout?: number;
enabled?: boolean;
clickType?: 'jQuery' | 'puppeteer';
text?: string;
}) {
const isJQuery = await el.evaluate(() => typeof $ == 'function');
if (isJQuery && options?.clickType == 'jQuery') {
console.log(`Click (${selector}) with jQuery`);
await clickWithJQuery(el, selector, options, options?.timeout ? (options.timeout / 100) : 300);
} else {
console.log(`Click (${selector}) with Puppeteer`);
if (options?.text) {
await findByTextSelectorAndClick(el, selector, options.text);
} else {
await el.waitForSelector(selector, options);
await el.focus(selector);
await el.click(selector);
}

}
}
waitTillHTMLRendered функция

Код: Выделить всё

export async function waitTillHTMLRendered(page: Page | Frame, timeout = 60000) {
const checkDurationMsecs = 1000;
const maxChecks = timeout / checkDurationMsecs;
let lastHTMLSize = 0;
let checkCounts = 1;
let countStableSizeIterations = 0;
const minStableSizeIterations = 3;

while (checkCounts++  document.body.innerHTML.length);

// console.log('last: ', lastHTMLSize, '  curr: ', currentHTMLSize, " body html size: ", bodyHTMLSize);

if (lastHTMLSize != 0 && currentHTMLSize == lastHTMLSize)
countStableSizeIterations++;
else
countStableSizeIterations = 0; //reset the counter

if (countStableSizeIterations >= minStableSizeIterations) {
console.log('Page rendered fully..' + bodyHTMLSize);
break;
}

lastHTMLSize = currentHTMLSize;
} catch (error) {
// Execution context was destroyed (navigation occurred)
console.log('waitTillHTMLRendered: Context destroyed, waiting for page to stabilize...', error);
await new Promise(res => setTimeout(res, 6000));
// Reset counters after navigation
lastHTMLSize = 0;
countStableSizeIterations = 0;
}

await new Promise(res => setTimeout(res, checkDurationMsecs));
}
}
У меня установлена ​​версия Puppeter 24

Подробнее здесь: https://stackoverflow.com/questions/797 ... of-a-navig
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»