How to effectively utilize page.waitForNavigation in Puppeteer for navigation handling?

How to effectively utilize page.waitForNavigation in Puppeteer for navigation handling?

Wait for a Specific Navigation Event: Use page.waitForNavigation() with the waitUntil option set to ‘domcontentloaded’ to wait for the DOMContentLoaded event before resolving the promise. This ensures that the page has finished loading the initial HTML content, which is useful for cases where you want to interact with elements as soon as they are available on the page.

await Promise.all([
  page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
  page.click('a[href="/newpage"]')
]);

Wait for Navigation to Complete Before Continuing: Store the promise returned by page.waitForNavigation() and await it after initiating a navigation action, such as page.goto(). This ensures that your script waits for the navigation to complete before proceeding further, which is useful when you need to perform actions on the newly loaded page.

const navigationPromise = page.waitForNavigation();
await page.goto('https://example.com');
await navigationPromise;

Handle Timeout and Error Scenarios: Use a try-catch block to handle timeout scenarios when waiting for navigation. By specifying a timeout value in milliseconds, you can control how long Puppeteer should wait for the navigation to complete. If the timeout is exceeded, a TimeoutError is thrown, which you can catch and handle accordingly in your script.

try {
  await page.waitForNavigation({ timeout: 5000 });
} catch (error) {
  if (error instanceof puppeteer.errors.TimeoutError) {
    console.error('Navigation took too long. Proceeding anyway.');
  } else {
    throw error;
  }
}