1. Introduction to Puppeteer 
 
Puppeteer  is a Node.js library  developed by Google. 
Provides a high-level API  to control Chrome or Chromium  over the DevTools Protocol . 
Ideal for automating browser tasks  such as UI testing, web scraping, PDF generation, etc. 
 
  
   
  2. Features of Puppeteer 
 
Headless browser automation (can also run in headful mode). 
Full control over page elements (DOM manipulation, navigation, inputs). 
Screenshot and PDF generation. 
Simulate user actions (clicks, typing, scrolling). 
Network interception and monitoring. 
Useful for testing SPAs (Single Page Applications). 
 
 
  
   
  3. Installing Puppeteer 
 
npm install  puppeteer
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
Installs the library along with a compatible Chromium binary.
 
 
  
   
  4. Basic Script Example 
 
const  puppeteer  =  require ( ' puppeteer ' ); 
( async  ()  =>  { 
  const  browser  =  await  puppeteer . launch ({  headless :  true  });  // or false for UI 
  const  page  =  await  browser . newPage (); 
  await  page . goto ( ' https://example.com ' ); 
  await  page . screenshot ({  path :  ' example.png '  }); 
  await  browser . close (); 
})(); 
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
 
  
   
  5. Common Puppeteer Commands 
 
Action 
Command 
 
 
Launch browser 
puppeteer.launch() 
 
Open new tab 
browser.newPage() 
 
Navigate to URL 
page.goto('url') 
 
Type into input 
page.type(selector, text) 
 
Click a button 
page.click(selector) 
 
Wait for element 
page.waitForSelector(selector) 
 
Take screenshot 
page.screenshot({ path: 'file.png' }) 
 
Evaluate JS 
page.evaluate(fn) 
 
Close browser 
browser.close() 
 
 
 
 
  
   
  6. Use Case: Login Automation 
 
await  page . goto ( ' https://example.com/login ' ); 
await  page . type ( ' #username ' ,  ' yourUsername ' ); 
await  page . type ( ' #password ' ,  ' yourPassword ' ); 
await  page . click ( ' #loginButton ' ); 
await  page . waitForNavigation (); 
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
 
  
   
  7. Wait Mechanisms 
 
waitForSelector(selector) – Waits for element. 
waitForNavigation() – Waits for page load/navigation. 
page.waitForTimeout(ms) – Waits for a fixed delay. 
Helps synchronize automation with dynamic UI. 
 
 
  
   
  8. Handling Alerts/Dialogs 
 
page . on ( ' dialog ' ,  async  dialog  =>  { 
  console . log ( dialog . message ()); 
  await  dialog . accept (); 
}); 
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
 
  
   
  9. Taking Screenshots & PDFs 
 
await  page . screenshot ({  path :  ' page.png ' ,  fullPage :  true  }); 
await  page . pdf ({  path :  ' page.pdf ' ,  format :  ' A4 '  }); 
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
 
  
   
  10. Emulating Devices 
 
const  iPhone  =  puppeteer . devices [ ' iPhone X ' ]; 
await  page . emulate ( iPhone ); 
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
 
  
   
  11. Headless vs Headful Mode 
 
Headless : No browser window shown; faster; for CI/CD. 
Headful : Browser UI is visible; helpful for debugging.
 
 
puppeteer . launch ({  headless :  false  });  // To see the browser 
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
 
  
   
  12. Advanced Features 
 
Intercept network requests :
 
 
  await  page . setRequestInterception ( true ); 
  page . on ( ' request ' ,  req  =>  { 
    if  ( req . resourceType ()  ===  ' image ' )  req . abort (); 
    else  req . continue (); 
  }); 
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
Evaluate JavaScript in the browser context :
 
 
  const  title  =  await  page . evaluate (()  =>  document . title ); 
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
  const  input  =  await  page . $ ( ' input[type="file"] ' ); 
  await  input . uploadFile ( ' /path/to/file.txt ' ); 
 
    Enter fullscreen mode 
     
 
    Exit fullscreen mode 
     
 
 
 
 
 
  
   
  13. Use Cases 
 
UI Testing & Regression Testing 
Automated Form Submission 
Capturing Screenshots for UIs 
Performance Monitoring 
Web Scraping and Data Extraction 
PDF generation of dynamic content 
CI/CD integration for UI flows 
 
 
  
   
  14. Pros and Cons 
 
Pros 
Cons 
 
 
Headless browser is fast and lightweight 
High memory usage on large tests 
 
Easy JavaScript API 
Some browser features unsupported 
 
Active community and documentation 
Heavier than HTTP-level testing tools 
 
Suitable for modern web apps (SPAs) 
Needs Chromium; increases package size 
 
 
 
 
  
   
  15. Puppeteer Alternatives 
 
Playwright : Developed by Microsoft; supports multiple browsers (Chromium, Firefox, WebKit). 
Selenium : Older tool, supports multiple languages. 
Cypress : Focused on frontend testing, rich GUI. 
Nightwatch.js : Uses WebDriver API. 
 
 
  
   
  16. Best Practices 
 
Always use proper wait methods to avoid flaky tests. 
Run in headful mode  when debugging. 
Use environment variables  for sensitive data (e.g., credentials). 
Combine with Jest , Mocha , or Jasmine  for test suites. 
Use page tracing  and console logs  for debugging. 
 
             
              
Top comments (0)