Synthèse
When even perfect headers aren't enough (because the site needs actual JavaScript execution), we use Playwright. typescriptimport { chromium } from 'playwright'; const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto('https://dynamic-site.com'); await page.waitForLoadState('networkidle'); const content = await page.content();123456789 This is an actual Chrome browser running - not pretending, actually executing: Real JavaScript rendering - React, Vue, A
When even perfect headers aren't enough (because the site needs actual JavaScript execution), we use Playwright. typescriptimport { chromium } from 'playwright'; const browser = await chromium. launch(); const page = await browser. newPage(); await page. goto('https://dynamic-site.
com'); await page. waitForLoadState('networkidle'); const content = await page. content();123456789 This is an actual Chrome browser running - not pretending, actually executing: Real JavaScript rendering - React, Vue, Angular, all of it worksDOM manipulation - Dynamic content loading works naturallyCookie/session handling - Maintains state like a real user sessionNetwork interception - Can monitor what the page is doing Single-page applications that load everything with JavaScriptSites that generate content dynamicallyComplex web apps with client-side logic The downside? Takes 10-20 seconds because we're running an actual browser. But when you need it, nothing else works.
This tier catches another 10-15% of sites that the first two couldn't handle. ⏱️ When you see "empty content" from Tier 1 or Tier 2, it's usually a JavaScript-heavy site. Skip straight to Tier 3 on retry to save time.
Tier 3: Browser Automation - Full JavaScript Execution
· 24 nov.
Tier 3: Browser Automation - Full JavaScript Execution
· 24 nov.
Tier 3: Browser Automation - Full JavaScript Execution
· 24 nov.
Tier 3: Browser Automation - Full JavaScript Execution
· 24 nov.
Tier 3: Browser Automation - Full JavaScript Execution
· 24 nov.