Menjalankan Selenium Tanpa Kepala dengan Chrome

Menjalankan Selenium Tanpa Kepala dengan Chrome

Jika Anda ingin melakukan otomatisasi web Selenium atau scrapping web dengan browser web Chrome, ini menjalankan versi grafis browser web Chrome secara default. Tidak menjadi masalah ketika Anda menjalankan skrip Selenium Anda dari lingkungan desktop grafis Linux (yaitu, GNOME 3, KDE, XFCE4). Tetapi jika Anda ingin menjalankan skrip Selenium Anda di lingkungan tanpa kepala (yaitu, Server Ubuntu, CentOS/RHEL Server) di mana Anda tidak menginstal lingkungan desktop grafis, maka ini tidak akan berfungsi.

Untungnya, Anda dapat mengonfigurasi Selenium untuk menjalankan browser web Chrome dalam cara tanpa kepala. Dalam cara ini, browser web Chrome akan berjalan tanpa interface user grafis. Jadi, Selenium dapat melakukan otomatisasi web, scrapping web, pengujian browser, dll. menggunakan browser web Chrome di server Linux di mana Anda tidak menginstal lingkungan desktop grafis.

Pada artikel ini, saya akan menunjukkan cara menjalankan Selenium dengan browser web Chrome dalam cara tanpa kepala. Saya akan menggunakan perpustakaan Selenium Python dan menulis skrip Selenium menggunakan bahasa pemrograman Python 3. Jadi, mari kita mulai.

Prasyarat:

Untuk mencoba perintah dan contoh dari artikel ini, Anda harus memiliki,

1) Distribusi Linux (sebaiknya Ubuntu) diinstal pada komputer Anda.
2) Python 3 diinstal di komputer Anda.
3) PIP 3 diinstal pada komputer Anda.
4) Google Chrome terpasang di komputer Anda.

Anda dapat menemukan banyak artikel tentang topik ini di LinuxHint.com. Pastikan untuk memeriksanya jika Anda memerlukan bantuan.

Mempersiapkan Lingkungan Virtual Python 3 untuk Proyek:

Python Virtual Environment digunakan untuk membuat direktori proyek Python yang terisolasi. Modul Python yang Anda instal menggunakan PIP akan diinstal di direktori proyek saja, tidak secara global.

Python virtualenv modul digunakan untuk mengelola lingkungan virtual Python.

Anda dapat menginstal Python virtualenv modul secara global menggunakan PIP 3 sebagai berikut:

$ sudo pip3 install virtualenv

Python virtualenv harus dipasang.

Buat direktori proyek chrome-headless/ di direktori kerja Anda saat ini sebagai berikut:

$ mkdir -pv chrome-headless/drivers

Arahkan ke direktori proyek yang baru Anda buat chrome-headless/ sebagai berikut:

$ cd chrome-headless /

Buat lingkungan virtual Python di direktori proyek Anda dengan perintah berikut:

$ virtualenv.venv

Lingkungan virtual Python harus dibuat di .venv/ direktori di direktori proyek Anda.

Aktifkan lingkungan virtual Python dari direktori proyek Anda dengan perintah berikut:

$ source.venv/bin/activate

Memasang Pustaka Selenium Python:

Pustaka selenium tersedia di repositori resmi Python PyPI.

Anda dapat menginstal perpustakaan Selenium Python menggunakan PIP 3 sebagai berikut:

$ pip3 install selenium

Pustaka Selenium Python harus diinstal.

Memasang Driver Web Chrome:

Chrome Web Driver akan memungkinkan Anda mengontrol atau mengotomatiskan browser web Google Chrome dari Selenium.

Di bagian ini, saya akan menunjukkan cara menginstal Driver Web Chrome.

Pertama, buka Google Chrome dan kunjungi chrome://settings/help.

Setelah halaman dimuat, Anda akan menemukan nomor versi Google Chrome di About Chromebagian. Perhatikan 3 bagian pertama dari nomor versi seperti yang ditandai pada tangkapan layar di bawah.

Untuk mengdownload Driver Web Chrome, kunjungi halaman downloadan Driver Chrome resmi.

Dalam Current Releasesbagian, Driver Web Chrome untuk rilis terbaru dari browser web Google Chrome harus tersedia, seperti yang Anda lihat pada tangkapan layar di bawah. Salah satu rilis Driver Web Chrome saat ini harus memiliki nomor versi yang cocok dengan browser web Google Chrome Anda. 3 bagian pertama dari nomor versi Chrome Web Driver dan browser web Google Chrome harus cocok.

Jika versi yang Anda cari tidak ada di Current releases bagian, gulir ke bawah sedikit, dan Anda harus dapat menemukannya.

Setelah Anda mengklik nomor versi Chrome Web Driver, itu akan dibawa ke halaman downloadannya. Klik padachromedriver_linux64.zip berkas dari sini.

Arsip Driver Web Chrome harus didownload.

yang didownload chromedriver_linux64.zip file harus ada di Anda ~/Downloads direktori.

$ ls -lh ~/Downloads

Ekstrak chromedriver_linux64.zip arsip dari ~/Downloads direktori ke drivers/ direktori proyek Anda sebagai berikut:

$ unzip ~/Downloads/chromedriver_linux64.zip -d drivers/

Sebuah file baru chromedriver harus dibuat dalam drivers/ direktori proyek Anda setelah arsip Chrome Web Driver diekstraksi, seperti yang Anda lihat pada tangkapan layar di bawah.

Menguji Driver Web Chrome dalam Mode Tanpa Kepala:

Di bagian ini, saya akan menunjukkan cara menjalankan Selenium menggunakan Driver Chrome dalam cara tanpa kepala.

Pertama, buat skrip Python baru ex01.py di direktori proyek Anda dan ketik baris kode berikut di dalamnya.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
chromeOptions = Options()
chromeOptions.headless = True
browser = webdriver.Chrome(executable_path="./drivers/chromedriver", options=chromeOptions)
browser.get("http://linuxhint.com")
print("Title: %s" % browser.title)
browser.quit()

Setelah selesai, simpan ex01.py skrip python.

Baris ini mengimpor semua barang yang diperlukan dari selenium Perpustakaan.

Seperti yang saya katakan sebelumnya, secara default, driver Chrome mencoba menjalankan Google Chrome dalam cara grafis. Untuk menjalankan Google Chrome dalam cara tanpa kepala, kami harus memberi tahu driver Chrome untuk memberikan beberapa opsi tambahan. Baris ini menciptakanOptions objek yang dapat kami teruskan ke driver web Chrome nanti.

Anda dapat menjalankan Google Chrome dalam cara tanpa kepala hanya dengan menyetel headless milik dari chromeOptions objek untuk True.

Atau, Anda dapat menggunakan add_argument() metode chromeOptions objek untuk menambahkan –headless argumen command line untuk menjalankan Google Chrome dalam cara tanpa kepala menggunakan driver web Selenium Chrome.

Anda dapat menggunakan webdriver.Chrome()metode untuk menginisialisasi/menjalankan browser web Google Chrome dari Selenium. Ituexecutable_path argumen digunakan untuk memberi tahu Selenium untuk menggunakan chromedriver biner dari drivers/direktori proyek. Ituoptions argumen memberi tahu Selenium untuk menggunakan opsi khusus kami chromeOptions.

Setelah Selenium menjalankan browser web Google Chrome menggunakan Selenium Chrome Web Driver, ia kembali sebagai browserobyek. Kita dapat menggunakannya untuk mengontrol instance Google Chrome nanti.

Itu browser.get() metode memuat linuxhint.com situs web di browser web Google Chrome di latar belakang (dalam cara tanpa kepala).

Setelah halaman dimuat, browser.titleproperti akan memiliki judul situs web. Pythonprint() metode mencetak judul situs web di konsol.

Kemudian, browser.quit() metode menutup browser web Google Chrome.

Untuk menguji apakah Selenium dapat bekerja dalam cara tanpa kepala, jalankan skrip Python ex01.py sebagai berikut:

$ python3 ex01.py

Itu harus mencetak judul situs web di konsol tanpa membuka browser web Google Chrome dalam cara grafis.

Hanya untuk menunjukkan kepada Anda bahwa itu berfungsi dari server tanpa kepala Linux (di mana tidak ada interface user grafis yang diinstal), saya telah menjalankan skrip Python ex01.pydi Ubuntu Server 20.04 LTS. Seperti yang Anda lihat, skrip berfungsi dengan baik.

Pengikisan Web dengan Selenium dalam Mode Tanpa Kepala menggunakan Driver Web Chrome:

Di bagian ini, saya akan menunjukkan kepada Anda contoh scrapping web di Selenium menggunakan driver web Chrome dalam cara tanpa kepala.

Pertama, kunjungi random-name-generator.info dari Google Chrome atau browser web lainnya. Situs web ini akan menghasilkan 10 nama acak setiap kali Anda mereload halaman, seperti yang dapat Anda lihat pada tangkapan layar di bawah. Tujuan kami adalah mengekstrak nama acak ini menggunakan Selenium dalam cara tanpa kepala.

Untuk mengetahui struktur HTML daftar, Anda harus membuka Chrome Developer Tool. Untuk melakukannya, tekan tombol kanan mouse (RMB) pada halaman dan klikInspect atau tekan <Ctrl> + <Shift> + I.

Alat Pengembang Chrome harus dibuka. Klik padaInspect icon ()seperti yang ditandai pada tangkapan layar di bawah ini.

Kemudian, arahkan kursor ke daftar Random names. Daftar harus disorot seperti yang ditandai pada tangkapan layar di bawah. Kemudian, tekan tombol kiri mouse (LMB) untuk memilih daftar.

Kode HTML dari daftar harus disorot di Elements tab dari Chrome Developer Tool. Di sini, daftar nama Acak ada di dalamdivelemen. Itudiv elemen memiliki class nama results. Di dalamnya, kami memilikiol elemen dengan class nama nameList. Di dalamol elemen, masing-masing nama ada di a li elemen.

Dari sini kita dapat mengatakan bahwa untuk sampai ke li tag, kita harus mengikuti div.results > ol.nameList > li

Jadi, pemilih CSS kita adalah div.results ol.nameList li (ganti saja > tanda dengan spasi putih)

Untuk mengekstrak nama acak ini, buat skrip Python baru ex02.py dan ketik baris kode berikut di dalamnya.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
chromeOptions = Options()
chromeOptions.headless = True
browser = webdriver.Chrome(executable_path="./drivers/chromedriver", options=chromeOptions)
browser.get("http://random-name-generator.info/")
nameList = browser.find_elements_by_css_selector('div.results ol.nameList li')
for name in nameList:
  print(name.text)
browser.quit()

Setelah selesai, simpan ex02.py skrip python.

Baris 1-8 sudah saya jelaskan di bagian awal artikel ini. Ini sama seperti diex01.py.

Baris 10 memuat situs web generator nama acak menggunakan browser.get() metode.

Baris 11 memilih daftar nama menggunakan browser.find_elements_by_css_selector()metode. Metode ini menggunakan pemilih CSSdiv.results ol.nameList liuntuk menemukan daftar nama. Kemudian, daftar nama disimpan dinameList variabel.

Pada baris 13 dan 14, a for loop digunakan untuk iterasi melalui nameList Daftar lielemen. Dalam setiap iterasi, isi darili elemen dicetak pada konsol.

Sekarang, jalankan skrip Python ex02.py sebagai berikut:

$ python3 ex02.py

Seperti yang Anda lihat, skrip Python ex02.py mengambil semua nama acak dari halaman web.

Jika Anda menjalankan skrip untuk kedua kalinya, itu akan mengembalikan daftar nama acak baru, seperti yang Anda lihat pada tangkapan layar di bawah.

Masalah yang Mungkin Anda Hadapi Menjalankan Selenium dalam Mode Tanpa Kepala:

Anda telah melihat sebelumnya bahwa menjalankan Selenium dalam cara tanpa kepala menggunakan driver Chrome semudah mengatur chromeOptions.headless bendera ke True.

Solusi ini mungkin tidak bekerja untuk Anda di beberapa distribusi Linux. Di bagian ini, saya akan berbicara tentang beberapa masalah yang mungkin Anda hadapi saat menjalankan Selenium dalam cara tanpa kepala menggunakan driver web Chrome.

Secara default, browser web Google Chrome melakukan banyak sandbox (menjalankan banyak hal di lingkungan yang terisolasi). Ini dapat menyebabkan masalah saat menjalankan Selenium dalam cara tanpa kepala menggunakan driver web Chrome. Anda dapat menonaktifkan kotak pasir untuk Google Chrome dengan menggunakan–no-sandbox bendera.

Untuk menambahkan –no-sandbox flag, tambahkan baris berikut sebelum menginisialisasi driver Selenium Chrome menggunakan webdriver.Chrome() metode (line 8 di ex01.py skrip Python).

chromeOptions.add_argument("--no-sandbox")

Anda mungkin mengalami masalah dalam melakukan hal-hal tertentu di browser web Google Chrome dari Selenium seperti mengambil tangkapan layar situs web dan sebagainya. Ini mungkin terjadi karena, dalam cara tanpa kepala, Google Chrome mungkin menyetel resolusi layar virtual yang salah. Jadi, situs web Anda mungkin tidak terlihat benar. Anda dapat mengatur resolusi layar virtual yang Anda inginkan untuk browser web Google Chrome dalam cara tanpa kepala menggunakan–window-size opsi command line.

Misalnya, untuk mengatur lebar layar virtual ke 1280 px dan tinggi ke 720 px, Tambahkan –window-size opsi command line sebelum menginisialisasi driver Selenium Chrome menggunakan webdriver.Chrome() metode (line 8 di ex01.py skrip Python) sebagai berikut:

chromeOptions.add_argument("--window-size=1280,720")

Server Anda mungkin tidak memiliki GPU yang terpasang, atau mungkin memiliki GPU yang tidak dapat digunakan oleh browser web Google Chrome. Secara default, Google Chrome harus secara otomatis menonaktifkan akselerasi GPU jika GPU tidak tersedia atau jika GPU yang tidak didukung tersedia. Dalam beberapa kasus, mungkin gagal melakukannya. Dalam hal ini, Selenium mungkin tidak dapat menjalankan browser web Google Chrome dalam cara tanpa kepala. Untuk mengatasi masalah ini, Anda harus menonaktifkan akselerasi GPU menggunakan–disable-gpu bendera.

Untuk menambahkan –disable-gpu flag, tambahkan baris berikut sebelum menginisialisasi driver Selenium Chrome menggunakan webdriver.Chrome() metode (line 8 di ex01.py skrip Python).

chromeOptions.add_argument(“—disable-gpu”)

Kesimpulan:

Pada artikel ini, saya telah menunjukkan kepada Anda cara mengatur Selenium dalam cara tanpa kepala menggunakan driver web Chrome. Saya telah membahas dasar-dasarnya, yang akan membantu Anda memulai otomatisasi browser Selenium tanpa kepala, pengujian web, dan pengikisan web.

Saya juga telah membahas beberapa argumen/bendera command line Google Chrome yang dapat Anda gunakan untuk menyelesaikan beberapa masalah yang mungkin Anda miliki saat menjalankan Selenium dalam cara tanpa kepala menggunakan driver web Chrome.

Ada banyak lagi opsi command line Google Chrome yang tersedia, yang tidak saya bahas dalam artikel ini. Opsi command line ini mungkin berguna untuk proyek Anda. Anda dapat menemukan semua opsi command line Google Chrome yang didukung di halaman Daftar Pengalih Baris Perintah Chromium oleh Peter Beverloo.

Related Posts