Browser tanpa kepala adalah komponen penting dari keduanya Pengikisan web serta pengujian otomatis. Mereka melakukan semua operasi browser biasa, seperti memuat halaman web, menjalankan JavaScript, dan berinteraksi dengan DOM (Document Object Model), tetapi tanpa antarmuka pengguna.
Hal ini menjadikannya lebih hemat sumber daya dibandingkan browser tradisional dan menggunakan lebih sedikit memori dan waktu CPU. Selain itu, pengoperasian dalam mode headless bisa lebih cepat karena tidak diperlukan pemrosesan dan rendering grafis.
Pada artikel ini, kita akan mengeksplorasi manfaat menggunakan browser tanpa kepala dengan Python. Kami juga memberikan ikhtisar perpustakaan browser tanpa kepala yang populer, termasuk Selenium, Pyppeteer, dan lainnya. Kami akan membahas fitur dan kemampuan utama setiap perpustakaan dan memberi Anda panduan dalam memilih perpustakaan yang tepat untuk kebutuhan spesifik Anda.
Daftar Isi
Memilih browser tanpa kepala untuk Python
Memilih browser tanpa kepala untuk Python sangat penting untuk mengembangkan program yang berinteraksi dengan halaman web tanpa membuka jendela browser. Pertama, mari kita lihat browser headless mana yang bisa kita gunakan dengan Python, perpustakaan mana yang menyediakannya, dan bandingkan kemampuan serta faktor-faktornya yang perlu dipertimbangkan.
Browser tanpa kepala populer untuk Python
Python memiliki beberapa perpustakaan yang memungkinkannya bekerja dengan browser tanpa kepala. Namun yang paling populer adalah sebagai berikut:
- selenium. Ini adalah salah satu alat otomatisasi browser web paling populer. Ini memungkinkan Anda mengontrol berbagai browser termasuk Chrome dan Firefox dalam mode tanpa kepala. Ini memiliki fungsionalitas yang luas dan komunitas pengguna aktif.
- orang pyppeteer. Ini adalah pembungkus Python untuk perpustakaan Puppeteer yang terkenal, awalnya dikembangkan untuk NodeJS dan dirancang untuk mengotomatiskan browser Chrome dan Chromium. Pyppeteer menyediakan antarmuka yang sederhana dan praktis untuk mengontrol browser dalam mode tanpa kepala, termasuk kemampuan untuk berinteraksi dengan DOM dan mengeksekusi JavaScript.
- dramawan adalah alat yang relatif baru dibandingkan dengan alat sebelumnya yang dikembangkan oleh Microsoft. Ini mendukung otomatisasi browser Chrome, Firefox dan WebKit dalam mode tanpa kepala dan reguler. Playwright menawarkan kemampuan pengujian dan pengikisan web yang ekstensif dan juga mendukung eksekusi operasi yang tidak sinkron.
- Sup mekanis. Tidak seperti alat lainnya, alat ini tidak secara langsung menawarkan mode tanpa kepala, tetapi dapat melakukan pengikisan web tanpa menampilkan browser.
Selain perpustakaan yang disebutkan di atas, ada perpustakaan lain seperti Ghost.py. Namun, perpustakaan ini kurang populer, memiliki komunitas yang kurang aktif, dan menawarkan fungsionalitas yang lebih sedikit. Beberapa orang juga menganggap Scrapy sebagai pustaka web scraping dengan browser tanpa kepala, tetapi lebih cocok untuk merayapi halaman web dan tidak mengizinkan kontrol browser.
Perbandingan berbagai browser tanpa kepala
Untuk membandingkan pustaka-pustaka ini dengan lebih baik, mari buat tabel yang memberikan gambaran umum yang jelas dan ringkas tentang kemampuannya:
Fitur khusus |
orang pyppeteer |
selenium |
dramawan |
Sup mekanis |
---|---|---|---|---|
Peramban tanpa kepala |
Ya (krom, krom) |
Ya (berbagai browser) |
Ya (Chrome, Firefox, WebKit) |
Tidak (menggunakan browser asli) |
keramahan pengguna |
Sedang |
Sedang |
Sedang |
Secara sederhana |
dokumentasi |
Sedang |
Luas |
Luas |
Sedang |
dukungan JavaScript |
Ya |
Ya |
Ya |
Tidak terbatas) |
Asinkron |
Ya |
TIDAK |
Ya |
TIDAK |
Berdasarkan pengalaman kami, Selenium dan Pyppeteer adalah perpustakaan terbaik untuk bekerja dengan browser tanpa kepala.
Jika Anda perlu bekerja dengan banyak browser dan baru mengenal web scraping, kami sarankan untuk memulai dengan Selenium. Ini relatif mudah dipelajari dan menawarkan banyak modul untuk mengurai data, seperti yang dibahas dalam tutorial kami tentang scraping dengan Selenium WebDriver.
Jika Anda hanya ingin bekerja dengan browser Chrome atau Chromium tanpa kepala, lebih menyukai tugas asinkron, atau memiliki pengalaman dengan Node.js, Pyppeteer mungkin merupakan pilihan yang lebih baik. Kami juga telah membahas web scraping dengan Pyppeteer di artikel lain.
Perpustakaan yang dikembangkan setelah Selenium dan Pyppeteer sering kali memiliki fungsi serupa atau mungkin kekurangan beberapa fitur. Selain itu, Selenium dan Pyppeteer memiliki varian untuk sebagian besar bahasa pemrograman modern, sehingga menghasilkan komunitas yang lebih besar, dokumentasi yang lebih baik, dan pengembangan yang aktif.
Memulai browser tanpa kepala dengan Python
Seperti disebutkan sebelumnya, Selenium dan Pyppeteer adalah dua perpustakaan luar biasa untuk bekerja dengan browser tanpa kepala. Meskipun kami memiliki artikel terpisah untuk masing-masingnya, bagian ini memberikan gambaran singkat tentang instalasi dan fungsi skrip dasar untuk meluncurkan dan mengambil HTML halaman. Kami harap perbandingan ini membantu Anda memilih perpustakaan terbaik.
Memasang browser tanpa kepala dengan Python
Setiap perpustakaan memiliki spesifikasi instalasinya sendiri. Jadi mari kita lihat satu per satu, dimulai dengan Pyppeteer. Karena menggunakan Puppeteer untuk mengoperasikannya, Anda perlu menginstal NodeJS untuk menggunakannya. Kemudian buka Terminal dan jalankan perintah berikut untuk menginstal Pyppeteer melalui pip:
pip install pyppeteer
Selama instalasi, Pyppeteer mencoba mengunduh Chromium untuk pengoperasian. Namun, Anda dapat memilih browser lain dengan menentukan jalurnya di PYPPETEER_EXECUTABLE_PATH
Variabel lingkungan.
Untuk menginstal Selenium, buka terminal dan gunakan perintah berikut:
pip install selenium
Anda juga memerlukan driver web agar browser pilihan Anda dapat bekerja dengan versi Selenium sebelumnya. Misalnya, untuk bekerja dengan browser Chrome, Anda memerlukan Chrome WebDriver. Pastikan driver ada di jalur Anda atau tentukan jalurnya di kode. Penting juga untuk diperhatikan bahwa versi driver web harus sesuai dengan versi browser yang diinstal.
Tulis skrip browser tanpa kepala pertama Anda
Misalnya, mari buat skrip kecil untuk menavigasi ke situs demo ini dan mendapatkan judul halaman. Mari kita mulai dengan perpustakaan Pyppeteer. Buat file baru dengan ekstensi .py dan impor perpustakaan yang diperlukan:
import asyncio
from pyppeteer import launch
Tentukan fungsi yang menggunakan browser tanpa kepala dan panggil fungsi tersebut secara asinkron menggunakan pustaka Asyncio yang Anda impor sebelumnya:
async def main():
# Here will be code
asyncio.get_event_loop().run_until_complete(main())
Mari kita tingkatkan fungsi utamanya. Pertama, mari buat objek browser tanpa kepala:
browser = await launch(headless=True)
Untuk menggunakan file browser tertentu, Anda harus menentukan jalurnya:
browser = await launch(headless=True, executablePath="chrome-win/chrome.exe")
Kemudian buat jendela dan tab browser baru:
page = await browser.newPage()
Buka halaman situs demo:
await page.goto('https://demo.opencart.com/')
Ekstrak judul halaman:
title = await page.title()
Terakhir, lihat hasilnya dan tutup browser:
print("Page title:", title)
await browser.close()
Seluruh kode terlihat seperti ini:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch(headless=True, executablePath="chrome-win/chrome.exe")
page = await browser.newPage()
await page.goto('https://demo.opencart.com/')
title = await page.title()
print("Page title:", title)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
Mari kita jalankan scriptnya dan lihat hasilnya:
Kami mencapai hal yang sama dengan perpustakaan Selenium. Mari kita impor dulu semua modul yang diperlukan:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
Tentukan mode tanpa kepala untuk menjalankan browser di latar belakang tanpa antarmuka pengguna grafis (GUI):
chrome_options = Options()
chrome_options.add_argument('--headless')
Mari kita buat instance objek browser tanpa kepala:
driver = webdriver.Chrome(options=chrome_options)
Metode pembuatan objek ini hanya berfungsi jika Anda menggunakan perpustakaan versi terbaru. Namun, jika Anda memiliki Selenium versi sebelumnya, Anda perlu menentukan jalur ke file driver web:
driver = webdriver.Chrome(executable_path="C:\driver\chromedriver.exe", options=chrome_options)
Mari navigasikan ke halaman situs demo dan ekstrak kontennya:
driver.get('https://demo.opencart.com/')
Dapatkan dan tampilkan judul:
title = driver.title
print("Page title:", title)
Pastikan Anda menutup browser di akhir:
driver.quit()
Script lengkapnya adalah sebagai berikut:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://demo.opencart.com/')
title = driver.title
print("Page title:", title)
driver.quit()
Mari kita jalankan dan pastikan kita mendapatkan data yang sama seperti saat menggunakan Pyppeteer:
Seperti yang Anda lihat, kedua pendekatan mencapai hasil yang sama. Namun, secara default Pyppeteer bekerja secara eksklusif dalam mode asinkron. Oleh karena itu, penggunaannya memerlukan perpustakaan Asyncio tambahan. Di sisi lain, Selenium tidak memerlukan perpustakaan tambahan untuk pengoperasiannya.
Tugas umum dengan browser tanpa kepala dengan Python
Perpustakaan yang dimaksud memiliki fungsionalitas yang cukup luas yang memungkinkan Anda menyelesaikan sebagian besar tugas yang memerlukan browser tanpa kepala. Mari kita pertimbangkan beberapa di antaranya:
- Pengikisan data. Seperti yang kami tunjukkan pada contoh, browser tanpa kepala memungkinkan Anda mengotomatiskan pengumpulan data dari situs web. Hal ini dapat berguna untuk mengekstraksi informasi untuk analisis, pengumpulan berita, atau pemantauan harga.
- Menguji aplikasi web. Browser tanpa kepala juga banyak digunakan untuk pengujian browser otomatis pada aplikasi web karena memungkinkan Anda meniru perilaku pengguna sebenarnya.
- Ambil tangkapan layar. Browser tanpa kepala dapat berguna jika Anda tidak ingin mengambil banyak tangkapan layar secara manual.
Ini hanyalah beberapa tugas paling umum yang dapat dilakukan menggunakan browser tanpa kepala dengan Python. Faktanya, mereka dapat berguna di mana saja yang memerlukan banyak tindakan monoton di browser. Selain itu, karena panggilan browser, situs web menganggap skrip tersebut bukan sebagai bot, tetapi sebagai pengguna sebenarnya.
Tips dan trik untuk pengembangan browser tanpa kepala
Untuk menjadikan penggunaan browser tanpa kepala lebih bermanfaat dan meluas, kami akan memperkenalkan beberapa poin penting yang dapat membantu Anda, seperti: Misalnya menggunakan multithreading, proxy, atau profil khusus tanpa kepala. Ini akan membuat skrip Anda lebih berguna dan fungsional.
Multithread
Multithreading memungkinkan Anda menjalankan banyak tugas secara bersamaan di thread terpisah. Dalam konteks browser tanpa kepala, ini bisa berguna ketika Anda perlu melakukan beberapa tindakan atau tugas independen di halaman web berbeda secara bersamaan. Misalnya, Anda dapat menggunakan multithreading untuk mengakses beberapa browser atau menjalankan beberapa skrip pengikisan data secara paralel untuk meningkatkan kinerja.
Pyppeteer tidak secara langsung mendukung multithreading karena kodenya pada dasarnya asinkron dan dapat dieksekusi secara paralel. Namun, menggunakan multithreading adalah pilihan bagus untuk Selenium jika Anda ingin melakukan banyak tugas secara bersamaan.
Sebagai contoh, mari kita sedikit memodifikasi skrip untuk menggunakan multithreading untuk mendapatkan judul situs demo dan example.com. Pertama, mari impor semua perpustakaan dan modul yang diperlukan:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import threading
Buat variabel untuk menyimpan daftar situs web:
urls = ('https://www.example.com', 'https://demo.opencart.com/')
Pindahkan skrip versi sebelumnya ke dalam fungsi yang menggunakan URL sebagai argumen:
def run_browser(url):
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
driver.get(url)
title = driver.title
print("Page title:", title)
driver.quit()
Buat variabel untuk menyimpan thread:
threads = ()
Membuat dan memulai thread:
for url in urls:
thread = threading.Thread(target=run_browser, args=(url,))
threads.append(thread)
thread.start()
Sekarang kita tinggal menunggu threadnya selesai:
for thread in threads:
thread.join()
Kode ini menunggu hingga semua thread yang dimulai selesai sebelum melanjutkan mengeksekusi thread utama program.
Ketika thread dibuat dan dimulai, thread tersebut berjalan bersamaan dengan thread utama program. Untuk memastikan bahwa thread utama tidak keluar sebelum semua thread yang dibuat selesai, maka join()
metode digunakan.
asinkron
Asynchrony memungkinkan operasi dilakukan tanpa memblokir thread. Hal ini sangat berguna untuk tugas-tugas yang memerlukan menunggu untuk operasi yang berjalan lama, seperti: B. memuat halaman web atau menjalankan JavaScript.
Saat bekerja dengan browser tanpa kepala, asinkron sering kali digunakan untuk operasi yang mungkin memerlukan waktu, seperti: Misalnya menunggu halaman dimuat atau mengirim permintaan asinkron ke server.
Di sisi lain, tidak seperti multithreading, Pyppeteer sempurna untuk digunakan dan Selenium tidak memiliki dukungan bawaan untuk asinkron.
Untuk mulai mengambil data dari beberapa halaman sekaligus menggunakan asynchrony, kita hanya perlu sedikit memodifikasi skrip sebelumnya di mana kita mendemonstrasikan karya Pyppeteer:
import asyncio
from pyppeteer import launch
urls = ('https://www.example.com', 'https://demo.opencart.com/')
async def run_browser(url):
browser = await launch(headless=True, executablePath="chrome-win/chrome.exe")
page = await browser.newPage()
await page.goto(url)
print(await page.title())
await browser.close()
async def main():
tasks = (run_browser(url) for url in urls)
await asyncio.gather(*tasks)
asyncio.run(main())
Kami memperkenalkan variabel untuk menyimpan URL dan mengimplementasikan pembuatan dan peluncuran tugas asinkron. Kalau tidak, skripnya tetap sama.
Penggunaan proksi
Server proxy memungkinkan Anda menyembunyikan alamat IP asli Anda. Ini dapat berguna karena berbagai alasan, seperti menyembunyikan lokasi Anda atau melewati pemblokiran situs web. Selain itu, beberapa situs web mungkin memblokir alamat IP yang membuat permintaan berlebihan. Dengan menggunakan proxy, permintaan didistribusikan ke alamat IP yang berbeda, sehingga mengurangi risiko pemblokiran.
Kami sebelumnya membahas dasar-dasar proxy, termasuk tujuannya dan di mana menemukan proxy gratis dan penyedia proxy yang andal. Oleh karena itu, artikel ini tidak akan membahas topik tersebut. Sebaliknya, kami akan fokus menggunakan proxy dengan browser tanpa kepala.
Untuk mengintegrasikan penggunaan proxy ke dalam browser tanpa kepala Selenium, Anda perlu menambahkan parameter tambahan sebelum membuat objek:
proxy = 'proxy_ip:proxy_port'
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % proxy)
Untuk menggunakan Pyppeteer Anda perlu melakukan hal yang sama:
proxy = 'proxy_ip:proxy_port'
browser = await launch(args=(f'--proxy-server={proxy}'), headless=True)
Jika Anda menggunakan proxy dan ingin menentukan nama pengguna dan kata sandi, konten variabel harus dalam format berikut:
proxy = 'username:password@proxy_ip:proxy_port'
Browser tanpa kepala mendukung semua proxy termasuk HTTP, HTTPS, dan SOCKS.
Manajemen agen pengguna
Menggunakan agen pengguna juga penting untuk bekerja dengan browser tanpa kepala. Ini memungkinkan Anda meniru browser dan sistem operasi tertentu di server web. Ini berguna untuk meniru perilaku pengguna dan menghindari terdeteksi sebagai bot.
Selain itu, beberapa server web mungkin menyajikan versi konten yang berbeda tergantung pada agen pengguna. Anda dapat menggunakan fitur ini untuk mengunduh situs web versi seluler atau yang dioptimalkan.
Kami sebelumnya telah membahas konsep agen pengguna secara mendetail, termasuk tujuannya dan tabel agen pengguna terbaru yang diperbarui secara otomatis. Sekarang mari kita jelajahi bagaimana Anda dapat menggunakannya dengan browser tanpa kepala. Anda dapat menggunakan kode berikut untuk mengimpornya ke Selenium:
options = webdriver.ChromeOptions()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36")
Untuk Pyppeteer:
browser = await launch(args=('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'))
Sebelum menggunakan, ganti User Agent pada contoh dengan yang terbaru.
Profil pengguna
Selenium dan Pyppeteer memungkinkan Anda menggunakan profil pengguna untuk menyesuaikan pengaturan browser Anda seperti bookmark, riwayat penelusuran, pengaturan keamanan, dll. Untuk menggunakannya, tentukan jalur ke profil yang diinginkan di pilihan Anda.
Folder profil biasanya terletak di folder pengguna, folder AppData untuk Windows, atau direktori home untuk macOS dan Linux. Namun, Anda dapat melihat jalur ke profil di halaman pengaturan browser. Untuk membukanya, ketikkan yang berikut ini di bilah alamat browser:
- Google Chrome:
chrome://version/
- Mozilla Firefox:
about:support
- Microsoft Tepi:
edge://version/
Cari bidang berlabel “Jalur Profil” atau “Folder Profil” yang berisi jalur ke folder profil. Anda juga dapat menyalin folder dan mentransfernya ke perangkat lain jika diperlukan.
Untuk menggunakan profil tertentu di Selenium gunakan kode berikut:
profile_path = r'C:\Users\Admin\AppData\Local\Google\Chrome\User Data\Profile 1'
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--user-data-dir={profile_path}')
Pyppeteer menawarkan cara serupa untuk menggunakan profil pengguna. Untuk melakukan ini, Anda perlu meneruskan opsi userDataDir ke metode launch():
profile_path = r'C:\Users\Admin\AppData\Local\Google\Chrome\User Data\Profile 1'
browser = await launch(userDataDir=profile_path)
Pastikan Anda memperbarui jalur profil ke jalur Anda saat ini sebelum menggunakannya.
Menggunakan ekstensi
Ekstensi dapat meningkatkan fungsionalitas browser dengan menambahkan fitur atau alat tambahan. Ini dapat berguna untuk tugas-tugas seperti memecahkan captcha atau memblokir iklan.
Anda memerlukan file ekstensi *.zip
atau *.crx
Format untuk menggunakan ekstensi di browser tanpa kepala. Anda juga perlu menentukannya di parameter objek browser. Misalnya, di Selenium, tampilannya akan seperti ini:
extension_path="folder/extension.crx"
chrome_options = webdriver.ChromeOptions()
chrome_options.add_extension(extension_path)
Untuk Pyppeteer:
extension_path="folder/extension.crx"
browser = await launch(headless=False, args=(f'--disable-extensions-except={extension_path}', f'--load-extension={extension_path}'))
Itu --disable-extensions-except
Opsi di Pyppeteer memungkinkan Anda menentukan ekstensi mana yang akan dinonaktifkan selain yang Anda tentukan.
Kesimpulan dan temuan
Artikel ini mengeksplorasi banyak manfaat menggunakan browser tanpa kepala dengan Python untuk pengikisan dan otomatisasi web. Meluncurkan browser dalam mode tanpa kepala memberikan solusi efektif untuk tugas-tugas seperti pengumpulan data dan pengujian aplikasi web dan dapat sangat menyederhanakan proses pengembangan.
Kami memeriksa berbagai perpustakaan dan menyimpulkan bahwa Pyppeteer dan Selenium adalah yang paling fungsional dan memungkinkan operasi browser tanpa kepala dengan Python. Selain itu, kami membahas teknik-teknik utama dan kasus penggunaan termasuk instalasi, pembuatan skrip, dan fitur-fitur canggih seperti multithreading dan manajemen proxy.
Namun, jika Anda perlu melakukan web scraping dengan cepat dan tidak ingin mengkonfigurasi dan memelihara infrastruktur sendiri, Anda dapat mengandalkan solusi siap pakai seperti Web Scraping API kami, yang segera memberi Anda data siap pakai. Dalam hal ini, Anda tidak perlu khawatir tentang menghubungkan proxy, menyelesaikan captcha, atau menggunakan browser tanpa kepala untuk mengambil konten dinamis dan dapat berkonsentrasi penuh pada pemrosesan data yang diterima.
Baik Anda memilih untuk menggunakan browser tanpa kepala atau API bawaan, penting untuk memilih alat yang tepat sesuai kebutuhan dan sasaran Anda. Kedua pendekatan tersebut menawarkan keunggulan unik dan dapat berhasil digunakan dalam berbagai skenario pengembangan web dan analisis data.