sickn33/agentic-awesome-skills · warning
Page load timeout, continuing...
Error message
Page load timeout, continuing...
What it means
waitForPageReady called page.waitForLoadState with the configured waitUntil state and timeout, and Playwright gave up before the page reached that state. The helper deliberately swallows the error ('continuing...') because many pages never reach 'networkidle'; the flow then proceeds to optional selector waits and content extraction. The warning means readiness is unconfirmed, not that navigation failed.
Source
Thrown at skills/playwright-skill/lib/helpers.js:100
}
/**
* Smart wait for page to be ready
* @param {Object} page - Playwright page
* @param {Object} options - Wait options
*/
async function waitForPageReady(page, options = {}) {
const waitOptions = {
waitUntil: options.waitUntil || 'networkidle',
timeout: options.timeout || 30000
};
try {
await page.waitForLoadState(waitOptions.waitUntil, {
timeout: waitOptions.timeout
});
} catch (e) {
console.warn('Page load timeout, continuing...');
}
// Additional wait for dynamic content if selector provided
if (options.waitForSelector) {
await page.waitForSelector(options.waitForSelector, {
timeout: options.timeout
});
}
}
/**
* Safe click with retry logic
* @param {Object} page - Playwright page
* @param {string} selector - Element selector
* @param {Object} options - Click options
*/
async function safeClick(page, selector, options = {}) {
const maxRetries = options.retries || 3;View on GitHub (pinned to 58d857988f)
Solutions
- Use waitUntil: 'domcontentloaded' or 'load' instead of 'networkidle' for SPAs
- Raise the timeout passed in options for slow targets or CI environments
- Anchor readiness to a concrete element with options.waitForSelector instead of a load state
Example fix
// before
await waitForPageReady(page, { waitUntil: 'networkidle', timeout: 10000 });
// after
await waitForPageReady(page, { waitUntil: 'domcontentloaded', timeout: 30000, waitForSelector: '#results' }); Defensive patterns
Strategy: fallback
Validate before calling
await waitForPageReady(page, { waitUntil: 'domcontentloaded', timeout: 30000, waitForSelector: '#main-content' }); Try / catch
// Anchor readiness to a selector with its own timeout instead of load-state waits
try {
await page.waitForSelector(selector, { timeout });
} catch {
await page.screenshot({ path: 'timeout-debug.png' }); // diagnose, then decide
} Prevention
- Avoid 'networkidle' on SPAs and long-polling pages
- Treat a load-state timeout as a soft signal; verify a concrete selector before scraping
When it happens
Trigger: Waiting for 'networkidle' on an SPA with websockets, analytics beacons, or long-polling; a slow third-party resource blocking 'load'; timeout too small for CI networks or throttled CPUs.
Common situations: Default networkidle strategy against modern apps; a hung font or tracking script keeping the network busy; heavy pages under CI where everything is slower; the document actually loaded fine and only the readiness signal was late.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
AI-assisted analysis of sickn33/agentic-awesome-skills@58d857988f (2026-08-26).
Data as JSON: /api/errors/e481fbfc60001a8e.
Report an issue: GitHub.