
Security News
New CNA Scorecard Tool Ranks CVE Data Quality Across the Ecosystem
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.
graceful-playwright
Advanced tools
Gracefully handle timeout and network error with auto retry.
auto retry when page.goto()
timeout or encountered ERR_NETWORK_CHANGED
auto restart page when page.goto()
crashed with /page crashed/i
error
helper method to auto retry when failed with The object has been collected to prevent unbounded heap growth
error
support restarting page from Browser
or BrowserContext
instance
support wrapping existing Page
instance
proxy frequently used methods
create Page
instance lazily (on-demand)
npm install graceful-playwright
You can install the package with yarn, pnpm or slnpm as well.
More usage examples see: example.ts and core.spec.ts
import { GracefulPage } from 'graceful-playwright'
let browser = await chromium.launch()
let page = new GracefulPage({ from: browser })
let lines: string[] = await page.autoRetryWhenFailed(async () => {
await page.goto('http://example.net')
return await page.evaluate(() =>
Array.from(document.querySelectorAll('a'), a => a.href),
)
})
console.log('lines:', lines)
await page.close()
await browser.close()
Main Class: GracefulPage
import { Browser, BrowserContext, Page, Response } from 'playwright'
export class GracefulPage {
constructor(
public options: {
from: Browser | BrowserContext
page?: Page | Promise<Page>
/**
* @default 5000 ms
*/
retryInterval?: number
/**
* @default error => console.error(error)
*/
onError?: (error: unknown) => void
},
)
fork(): GracefulPage
getPage(): Page | Promise<Page>
restart(options?: Parameters<Page['close']>[0]): Promise<Page>
/** @description optimized version of page.close() */
close: Page['close']
/**
* @description graceful version of page.goto()
* @throws GotoError with response details when got 429 Too Many Requests without retry-after header
*/
goto(
url: string,
/**
* @default { waitUtil: "domcontentloaded" }
*/
options?: Parameters<Page['goto']>[1],
): Promise<Response | null>
autoRetryWhenFailed<T>(f: () => T | Promise<T>): Promise<T>
/** @description proxy method to (await this.getPage())[method] */
evaluate: Page['evaluate']
waitForSelector: Page['waitForSelector']
fill: Page['fill']
click: Page['click']
content: Page['content']
title: Page['title']
innerHTML: Page['innerHTML']
innerText: Page['innerText']
}
Error Class: GotoError
export class GotoError extends Error {
constructor(message: string, public details: GotoErrorDetails)
}
export type GotoErrorDetails = {
url: string
options?: Parameters<Page['goto']>[1]
response: Awaited<ReturnType<Page['goto']>>
}
This project is licensed with BSD-2-Clause
This is free, libre, and open-source software. It comes down to four essential freedoms [ref]:
FAQs
Gracefully handle timeout and network error with auto retry.
The npm package graceful-playwright receives a total of 2 weekly downloads. As such, graceful-playwright popularity was classified as not popular.
We found that graceful-playwright demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.
Research
/Security News
Two npm packages masquerading as WhatsApp developer libraries include a kill switch that deletes all files if the phone number isn’t whitelisted.
Research
/Security News
Socket uncovered 11 malicious Go packages using obfuscated loaders to fetch and execute second-stage payloads via C2 domains.