Pertanyaan umum (FAQ)

Apa status dukungan lintas browser?

Dukungan Firefox resmi bersifat eksperimental. Kolaborasi berkelanjutan dengan Mozilla bertujuan untuk mendukung kasus penggunaan pengujian menyeluruh yang umum, yang diharapkan oleh developer untuk cakupan lintas-browser. Tim Puppeteer memerlukan masukan dari pengguna untuk menstabilkan dukungan Firefox dan menyampaikan API yang hilang kepada kami.

Dari Puppeteer v2.1.0 dan seterusnya, Anda dapat menentukan puppeteer.launch({product: 'firefox'}) untuk menjalankan skrip Puppeteer di Firefox Nightly, tanpa patch
kustom tambahan. Meskipun eksperimen lama memerlukan Firefox versi yang di-patch, pendekatan saat ini berfungsi dengan Firefox "stok".

Kami terus berkolaborasi dengan vendor browser lainnya untuk menghadirkan dukungan Puppeteer ke browser, seperti Safari. Upaya ini mencakup eksplorasi standar untuk menjalankan perintah lintas browser (bukan mengandalkan Protokol DevTools non-standar yang digunakan oleh Chrome).

Apa tujuan dan prinsip Puppeteer?

Tujuan proyek ini adalah:

  • Sediakan library kanonis ramping yang menyoroti kemampuan Protokol DevTools.
  • Menyediakan implementasi referensi untuk library pengujian serupa. Akhirnya, kerangka kerja lain ini dapat mengadopsi Puppeteer sebagai lapisan dasar.
  • Meningkatkan penggunaan pengujian browser headless/otomatis.
  • Bantu dogfood fitur DevTools Protocol baru...dan temukan bug!
  • Pelajari lebih lanjut tentang titik masalah dari pengujian browser otomatis dan membantu mengisi kesenjangan tersebut.

Kami menyesuaikan prinsip Chromium untuk membantu kami mengambil keputusan terkait produk:

  • Kecepatan: Puppeteer memiliki overhead performa yang hampir nol.
  • Keamanan: Puppeteer beroperasi di luar proses sehubungan dengan Chromium, sehingga aman untuk mengotomatiskan halaman yang berpotensi berbahaya.
  • Stabilitas: Puppeteer seharusnya tidak mudah patah dan tidak boleh membocorkan memori.
  • Kesederhanaan: Puppeteer menyediakan API level tinggi yang mudah digunakan, dipahami, dan di-debug.

Apakah Puppeteer menggantikan Selenium/WebDriver?

Tidak. Kedua project bernilai karena alasan yang sangat berbeda:

  • Selenium/WebDriver berfokus pada otomatisasi lintas browser; proposisi nilainya adalah satu API standar yang berfungsi di semua browser utama.
  • Puppeteer berfokus pada Chromium; proposisi nilainya adalah kemampuan yang lebih kaya dan keandalan yang lebih tinggi.

Meskipun demikian, Anda dapat menggunakan Puppeteer untuk menjalankan pengujian terhadap Chromium, seperti menggunakan jest-puppeteer berbasis komunitas. Meskipun ini mungkin bukan satu-satunya solusi pengujian Anda, solusi ini memiliki beberapa keunggulan dibandingkan WebDriver:

  • Puppeteer memerlukan penyiapan nol dan dilengkapi dengan versi Chromium yang paling optimal digunakan. Lebih baik melakukan beberapa pengujian khusus Chromium, daripada tidak melakukan pengujian sama sekali.
  • Puppeteer memiliki arsitektur berbasis peristiwa, yang menghilangkan banyak potensi kegagalan. Tidak perlu panggilan "sleep(1000)" jahat dalam naskah puppeteer.
  • Puppeteer menjalankan headless secara default, yang membuatnya cepat untuk dijalankan. Puppeteer v1.5.0 juga mengekspos konteks browser, sehingga memungkinkan untuk memparalelkan eksekusi uji secara efisien.
  • Puppeteer bersinar saat menangani proses debug: ubah bit "headless" menjadi false, tambahkan "slowMo", dan Anda akan melihat apa yang dilakukan browser. Anda bahkan dapat membuka Chrome DevTools untuk memeriksa lingkungan pengujian.

Mengapa Puppeteer v.XXX tidak berfungsi dengan Chromium v.YYY?

Kami melihat Puppeteer sebagai entitas yang tak terpisahkan dengan Chromium. Setiap versi Puppeteer memaketkan versi Chromium tertentu – satu-satunya versi yang dijamin dapat digunakan.

Ini bukan batasan buatan. Banyak pekerjaan Puppeteer yang sebenarnya berlangsung di repositori Chromium. Ceritanya seperti ini:

  1. Bug Puppeteer dilaporkan
  2. Ini adalah masalah pada protokol DevTools, jadi kami memperbaikinya di Chromium
  3. Setelah perbaikan upstream tersedia, kami meluncurkan Chromium yang diupdate ke Puppeteer

Namun, sering kali lebih diinginkan untuk menggunakan Puppeteer dengan Google Chrome resmi, bukan Chromium. Agar berfungsi, Anda harus menginstal versi puppeteer-core yang sesuai dengan versi Chrome.

Misalnya, untuk mendorong Chrome 101 dengan puppeteer-core, gunakan tag npm chrome-101:

npm install puppeteer-core@chrome-101

Versi Chromium mana yang digunakan Puppeteer?

Temukan versi menggunakan salah satu cara berikut:

  • Cari entri chromium di revisions.ts. Untuk menemukan commit Chromium dan nomor versi yang sesuai, telusuri revisi yang diawali dengan r di bagian "Find Releases" OmahaProxy.
  • Cari peta versionsPerRelease di versions.js yang berisi pemetaan antara versi Chromium dan Puppeteer. Catatan: File hanya berisi versi Puppeteer tempat Chromium diupdate. Tidak semua versi Puppeteer tercantum.

Versi Firefox mana yang digunakan Puppeteer?

Karena dukungan Firefox bersifat eksperimental, Puppeteer mendownload Firefox Nightly terbaru saat variabel lingkungan PUPPETEER_PRODUCT disetel ke firefox. Itu juga sebabnya nilai firefox di revisions.ts adalah latest -- Puppeteer tidak terikat dengan versi Firefox tertentu.

Untuk mengambil Firefox Nightly sebagai bagian dari penginstalan Puppeteer:

PUPPETEER_PRODUCT=firefox npm i puppeteer
# or "yarn add puppeteer"

Apa yang dianggap sebagai navigasi?

Dari sudut pandang Puppeteer, "navigasi" adalah segala sesuatu yang mengubah URL laman. Selain navigasi reguler tempat browser menjangkau jaringan untuk mengambil dokumen baru dari server web, ini juga mencakup navigasi anchor dan penggunaan History API.

Dengan definisi "navigasi" ini, Puppeteer berfungsi lancar dengan aplikasi web satu halaman.

Apa perbedaan antara peristiwa input "tepercaya" dan "tidak tepercaya"?

Di browser, peristiwa input dapat dibagi menjadi dua grup besar: tepercaya vs tidak tepercaya.

  • Peristiwa tepercaya: peristiwa yang dihasilkan oleh pengguna yang berinteraksi dengan halaman, seperti menggunakan mouse atau keyboard.
  • Peristiwa tidak tepercaya: peristiwa yang dihasilkan oleh Web API, seperti metode document.createEvent atau element.click().

Situs web dapat membedakan antara dua kelompok ini:

  • menggunakan tanda peristiwa Event.isTrusted
  • penyadapan untuk peristiwa yang menyertainya. Misalnya, setiap peristiwa 'click' tepercaya didahului dengan peristiwa 'mousedown' dan 'mouseup'.

Untuk tujuan otomatisasi, penting untuk membuat peristiwa tepercaya. Semua peristiwa input yang dibuat dengan Puppeteer dipercaya dan mengaktifkan peristiwa yang menyertainya.

Jika karena alasan tertentu, seseorang memerlukan peristiwa tidak tepercaya, selalu ada kemungkinan untuk membuka konteks halaman dengan page.evaluate dan membuat peristiwa palsu:

await page.evaluate(() => {
  document.querySelector('button[type=submit]').click();
});

Fitur apa yang tidak didukung Puppeteer?

Anda mungkin mendapati bahwa Puppeteer tidak berperilaku seperti yang diharapkan saat mengontrol halaman yang menyertakan audio dan video. Misalnya, pemutaran video dan screenshot kemungkinan akan gagal.) Ada dua alasan untuk hal ini:

  • Puppeteer dipaketkan dengan Chromium (bukan Chrome). Jadi, secara default, atribut ini mewarisi semua batasan terkait media Chromium. Artinya, Puppeteer tidak mendukung format berlisensi seperti AAC atau H.264.
    • Anda dapat memaksa Puppeteer menggunakan versi Chrome yang diinstal terpisah, bukan Chromium, dengan opsi executablePath untuk puppeteer.launch. Sebaiknya gunakan konfigurasi ini hanya jika Anda memerlukan rilis resmi Chrome yang mendukung format media ini.
  • Karena Puppeteer (dalam semua konfigurasi) mengontrol versi desktop Chromium atau Chrome, fitur yang hanya didukung oleh Chrome versi seluler tidak didukung. Artinya, Puppeteer tidak mendukung HTTP Live Streaming (HLS).

Saya mengalami masalah saat menginstal / menjalankan Puppeteer di lingkungan pengujian. Di mana saya harus mencari bantuan?

Kami memiliki panduan pemecahan masalah untuk berbagai sistem operasi yang mencantumkan dependensi yang diperlukan.

Chromium didownload setiap kali npm ci dijalankan. Bagaimana cara meng-cache hasil download?

Jalur download default adalah node_modules/puppeteer/.local-chromium. Namun, Anda dapat mengubah jalur tersebut dengan variabel lingkungan PUPPETEER_DOWNLOAD_PATH.

Puppeteer menggunakan variabel tersebut untuk me-resolve lokasi Chromium yang dapat dieksekusi selama peluncuran, sehingga Anda juga tidak perlu menentukan PUPPETEER_EXECUTABLE_PATH.

Misalnya, untuk menyimpan download Chromium di ~/.npm/chromium:

export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium
npm ci

# by default the Chromium executable path is inferred
# from the download path
npm test

# a new run of npm ci will check for the existence of
# Chromium in ~/.npm/chromium
npm ci

Saya punya pertanyaan lain. Di mana saya harus bertanya?

Ada banyak cara untuk mendapatkan bantuan terkait Puppeteer:

Pastikan untuk menelusuri saluran tersebut sebelum memposting pertanyaan Anda.