Puppeteer — Node.js orqali Chromium yoki Chrome’ga yaqin browserlarni yuqori darajadagi API bilan boshqarish uchun ishlatiladigan browser automation kutubxonasi. U sahifani ochish, DOM bilan ishlash, screenshot, PDF, scraping, performance tahlili va avtomatik test vazifalarida qo‘llanadi.
Puppeteer Chrome DevTools Protocolga yaqin imkoniyatlardan foydalanadi va browserni headless yoki headed rejimda ishga tushirishi mumkin.
Browser
launch yangi browser process yaratadi.
Konfiguratsiya:
- headless;
- executable path;
- argument;
- proxy;
- sandbox;
- user data directory;
- timeout.
Har request uchun yangi browser ochish qimmat.
Service’da browser pool ishlatilishi mumkin.
Page
Page browserdagi tabni ifodalaydi.
API:
goto;click;type;evaluate;screenshot;pdf;waitForSelector;- eventlar.
Bir browserda bir nechta page parallel ishlashi mumkin.
Browser context
Alohida cookie va storage holati uchun incognito yoki browser context ishlatiladi.
Bu user sessionlarini izolyatsiya qiladi.
Context yopilganda unga tegishli page’lar ham yopiladi.
Shared default context testlar orasida data qoldirishi mumkin.
Navigation
page.goto() URLga o‘tadi.
Kutish sharti:
bo‘lishi mumkin.
Network idle doimiy websocket yoki analytics request mavjud sahifada hech qachon kelmasligi mumkin.
Selector
CSS selector, textga oid helper yoki accessibility selector orqali element topiladi.
Dynamic UI’da element mavjud, visible va enabled holatlarini alohida tekshirish kerak.
DOMga bog‘langan uzun selector maintenance’ni qiyinlashtiradi.
Evaluate
page.evaluate() browser contextida JavaScript bajaradi.
Node variable’lari avtomatik mavjud emas; argument sifatida serializatsiya qilinadi.
Qaytadigan qiymat ham serializable bo‘lishi kerak.
DOM node to‘g‘ridan-to‘g‘ri Node processiga ko‘chmaydi.
Element handle
DOM elementga reference beradi.
Sahifa rerender qilinsa handle eskirishi mumkin.
Kerakli action oldidan qayta query qilish barqarorroq.
Handle disposal memoryni bo‘shatadi.
Locatorga oid yuqori darajadagi APIlar mavjud bo‘lishi mumkin.
Screenshot
Full-page yoki aniq element screenshot olinadi.
Format:
- PNG;
- JPEG;
- WebPga oid support.
Viewport va device scale factor natijaga ta’sir qiladi.
Dynamic animation va font visual diffni beqaror qilishi mumkin.
Headless Chrome web sahifani PDFga print qilishi mumkin.
Sozlamalar:
- format;
- margin;
- print background;
- header/footer;
- landscape.
Print CSS screen CSSdan farq qilishi mumkin.
Remote assetlar yuklanganini kutish kerak.
Network interception
Requestlarni kuzatish, abort qilish yoki o‘zgartirish mumkin.
Masalan:
Har intercepted requestga continue, respond yoki abort javobi berilishi kerak.
Response kuzatuvi
Page request va response eventlarini chiqaradi.
Status, header va timing yig‘iladi.
Redirect chain alohida response’lardan iborat.
Body’ni ko‘p katta response uchun saqlash memory sarfini oshiradi.
Cookie
Cookie page yoki browser context darajasida o‘qiladi va yoziladi.
Authenticated session oldindan yaratish mumkin.
Secure va SameSite qoidalari browser tomonidan saqlanadi.
Cookie faylida token bo‘lsa artifact himoyalanadi.
Device emulation
Viewport, user agent, touch va device scale sozlanadi.
Mobil layout va browser behaviori taxminan tekshiriladi.
Real device CPU, GPU, browser UI va sensor farqini to‘liq takrorlamaydi.
Performance testi real qurilmada ham bajariladi.
Performance
DevTools metric, tracing va coverage APIlaridan foydalanish mumkin.
Page load:
bo‘yicha tahlil qilinadi.
Automationning o‘zi natijaga overhead qo‘shishi mumkin.
Scraping
Puppeteer JavaScript bilan render qilinadigan sahifadan data olishda ishlatiladi.
Developer:
- sayt qoidalari;
- robots;
- rate limit;
- copyright;
- privacy;
- authentication
talablarini hisobga oladi.
Browser automation access controlni chetlab o‘tish vositasi emas.
Download
Browser download event va directory configuration orqali fayl olinadi.
Filename server header yoki browser qaroriga bog‘liq.
Parallel page’lar bir directory’da collision qilishi mumkin.
Har task uchun alohida temporary directory ishlatiladi.
Upload
File inputga local path beriladi.
Browser process boshqa container yoki hostda bo‘lsa file shu environmentda mavjud bo‘lishi kerak.
Remote service file transfer qatlamini alohida tashkil qiladi.
Dialog
Alert, confirm va prompt event orqali boshqariladi.
Handler o‘rnatilmasa dialog navigationni bloklashi mumkin.
Test expected textni tekshiradi, keyin accept yoki dismiss qiladi.
Error handling
Browser process crash, page crash, navigation timeout va detached frame kabi xatolar yuz beradi.
Retry faqat idempotent operationlarda qo‘llanadi.
Browser health tekshiriladi va buzilgan process pooldan chiqariladi.
Security
Untrusted sahifani browserda ochish xavf tug‘diradi.
Container, sandbox, minimal permission va network egress cheklovi ishlatiladi.
--no-sandboxni nazoratsiz qo‘llash isolationni kamaytiradi.
Downloaded fayllar alohida tekshiriladi.
Puppeteer va Playwright
Puppeteer Chromium/Chrome avtomatizatsiyasiga chuqur bog‘langan va Node ekotizimida keng ishlatiladi.
Playwright bir nechta browser engine, context va test runner imkoniyatlarini birlashtiradi.
Oddiy PDF va Chrome automation uchun Puppeteer sodda tanlov bo‘lishi mumkin.
Browser pool
Ko‘p PDF yoki screenshot requestida browser processlarni poolda qayta ishlatish startup xarajatini kamaytiradi. Har task alohida context oladi. Memory leak va crashdan keyin process ma’lum request sonidan so‘ng almashtirilishi mumkin.
Font
Serverda kerakli font bo‘lmasa PDF va screenshot layouti o‘zgaradi. Container image fontlarni aniq versiyada saqlaydi va document.fonts.ready kabi signal bilan renderdan oldin yuklanishini kutadi.
Bog‘liq tushunchalar
Puppeteer, Chrome DevTools Protocol, Chromium, Browser automation, Headless browser, Screenshot, PDF generation, Network interception, Web scraping, Playwright