DataLens

Menyiapkan Playwright dan menjalankan browser

Pasang Playwright dengan uv, jalankan browser dari Python, dan pahami tiga objek yang dipakai setiap script (browser, context, page) serta cara menutupnya dengan rapi.

Level: Dasar · 7 menit baca

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Idenya

Setiap script Playwright, dari test 5 baris sampai scraper yang berjalan setiap malam, dimulai dengan cara yang sama: jalankan Playwright, luncurkan browser, buka halaman. Modul ini membahas kerangka itu dengan tuntas, supaya sisa track ini bisa fokus pada bagian-bagian yang menarik.

Memasang (di komputermu sendiri)

Playwright terdiri dari dua hal: package Python, dan browser yang dikendalikannya. Di proyek uv:

uv add playwright
uv run playwright install chromium

Perintah pertama menambahkan package-nya ke pyproject.toml; yang kedua mengunduh build Chromium yang sesuai (sekitar 150 MB, sekali saja). Di kursus ini, browser latihan sudah disiapkan, jadi kode di bawah bisa langsung berjalan di sini.

Kerangkanya

Setiap script Playwright dimulai dengan cara yang sama: jalankan browser, buka sebuah tab, pergi ke sebuah halaman, kerjakan pekerjaanmu, lalu tutup. Ini versi terkecilnya, yang mengunjungi toko latihan dan mencetak judul halamannya:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://nusantara-gadget.test/")
    print(page.title())
    browser.close()
Nusantara Gadget — Official Gadget Store

Baris demi baris:

Kata sync di sync_playwright berarti setiap baris menunggu aksinya selesai sebelum lanjut, persis seperti yang kamu inginkan untuk script. Playwright juga punya async_api untuk menjalankan banyak halaman secara bersamaan; kamu belum akan membutuhkannya sampai kamu men-scrape dalam skala besar.

Headless atau headed?

Secara default browser berjalan headless: tanpa jendela yang terlihat. Itu lebih cepat dan itulah yang kamu inginkan di server. Saat development, sering kali berguna untuk melihat apa yang terjadi:

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, slow_mo=500)
    page = browser.new_page()
    page.goto("https://nusantara-gadget.test/products")
    print(page.title())
    browser.close()
Products — page 1 — Nusantara Gadget

headless=False membuka jendela sungguhan; slow_mo=500 berhenti 500 ms di antara aksi supaya kamu bisa mengikutinya. Kembali ke headless begitu script-nya berfungsi.

Browser, context, page

Playwright punya tiga level:

ObjekMirip denganMenyimpan
Browseraplikasi browsersatu atau lebih context
BrowserContextprofil browser baru yang privatcookie, storage, pengaturan (viewport, user agent)
Pagesebuah tabsatu URL dalam satu waktu

browser.new_page() adalah jalan pintas yang membuat context dengan satu page. Buat context sendiri saat kamu butuh pengaturan, atau beberapa session yang independen:

with sync_playwright() as p:
    browser = p.chromium.launch()
    phone = browser.new_context(viewport={"width": 390, "height": 844})
    laptop = browser.new_context(viewport={"width": 1440, "height": 900})
    phone_page = phone.new_page()
    laptop_page = laptop.new_page()
    phone_page.goto("https://nusantara-gadget.test/deals")
    laptop_page.goto("https://nusantara-gadget.test/products")
    print(phone_page.viewport_size, phone_page.title())
    print(laptop_page.viewport_size, laptop_page.title())
    browser.close()
{'width': 390, 'height': 844} Flash deals — Nusantara Gadget
{'width': 1440, 'height': 900} Products — page 1 — Nusantara Gadget

Context itu murah dan terisolasi: login di satu context tidak membuat context lain ikut login. Begitulah cara kamu men-scrape sebagai dua pengguna berbeda, atau memulai setiap proses dari kondisi bersih.

Ide utama

sync_playwright() → launch() browser → new_context() untuk profil bersih → new_page() untuk tab → goto(url). Selalu tutup browser, dan biarkan blok with yang membersihkan Playwright.

Di luar blok with

Di notebook atau session interaktif kamu mungkin ingin browser tetap terbuka di antara cell. Gunakan start() dan stop() alih-alih with:

p = sync_playwright().start()
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://nusantara-gadget.test/catalog")
print(page.url)
browser.close()
p.stop()
https://nusantara-gadget.test/catalog

Sekarang kamu sendiri yang bertanggung jawab memanggil close() dan stop(); di script, utamakan bentuk with.

Mengapa ini penting untuk kode yang bersih

Pembersihan resource adalah pembeda antara script yang berjalan berbulan-bulan dan script yang pelan-pelan memenuhi server dengan proses browser zombie. Context manager (with) membuat pembersihan otomatis, dan membungkus kerangka itu dalam sebuah fungsi (seperti di latihan) berarti kamu menulisnya sekali dan setiap scraper memakainya ulang.

Rangkuman

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Berikutnya: Bernavigasi antarhalaman dan mengambil screenshot →