Selenium

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. Ini bukan masalah ketika Anda menjalankan skrip Selenium Anda dari lingkungan desktop grafis Linux (mis.e., GNOME 3, KDE, XFCE4). Tetapi jika Anda ingin menjalankan skrip Selenium Anda di lingkungan tanpa kepala (mis.e., Ubuntu Server, 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 mode tanpa kepala. Dalam mode ini, browser web Chrome akan berjalan tanpa antarmuka pengguna 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 apa pun.

Pada artikel ini, saya akan menunjukkan cara menjalankan Selenium dengan browser web Chrome dalam mode 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 (lebih disukai Ubuntu) diinstal pada komputer Anda.
2) Python 3 diinstal di komputer Anda.
3) PIP 3 diinstal di 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:

Lingkungan Virtual Python 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 instal virtualenv

Python virtualenv harus dipasang.

Buat direktori proyek tanpa kepala krom/ di direktori kerja Anda saat ini sebagai berikut:

$ mkdir -pv chrome-headless/drivers

Arahkan ke direktori proyek yang baru Anda buat tanpa kepala krom/ sebagai berikut:

$ cd tanpa kepala chrome /

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:

$ sumber .venv/bin/aktifkan

Memasang Pustaka Selenium Python:

Pustaka selenium tersedia di repositori resmi Python PyPI.

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

$pip3 instal selenium

Pustaka Selenium Python harus diinstal.

Memasang Driver Web Chrome:

Driver Web Chrome 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 Tentang Chrome bagian. Perhatikan 3 bagian pertama dari nomor versi seperti yang ditandai pada tangkapan layar di bawah.

Untuk mengunduh Driver Web Chrome, kunjungi halaman unduhan Driver Chrome resmi.

Dalam Rilis Saat Ini bagian, 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 Driver Web Chrome dan browser web Google Chrome harus cocok.

Jika versi yang Anda cari tidak ada di Rilis saat ini bagian, gulir ke bawah sedikit, dan Anda harus dapat menemukannya.

Setelah Anda mengklik nomor versi Chrome Web Driver, itu akan dibawa ke halaman unduhannya. Klik pada chromedriver_linux64.zip file dari sini.

Arsip Driver Web Chrome harus diunduh.

yang diunduh chromedriver_linux64.zip file harus ada di Anda ~/Unduhan direktori.

$ ls -lh ~/Downloads

Ekstrak chromedriver_linux64.zip arsip dari ~/Unduhan direktori ke pengemudi/ direktori proyek Anda sebagai berikut:

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

Sebuah file baru chromedriver harus dibuat dalam pengemudi/ 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 mode tanpa kepala.

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

dari selenium impor webdriver
dari selenium.webdriver.umum.kunci impor Kunci
dari selenium.webdriver.krom.opsi impor Opsi
chromeOptions = Opsi()
chromeOptions.tanpa kepala = Benar
browser = webdriver.Chrome(executable_path="./driver/chromedriver", opsi = chromeOptions)
peramban.get("http://linuxhint.com")
print("Judul: %s" % browser.judul)
peramban.berhenti()

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 mode grafis. Untuk menjalankan Google Chrome dalam mode tanpa kepala, kami harus memberi tahu driver Chrome untuk memberikan beberapa opsi tambahan. Baris ini menciptakan Pilihan objek yang dapat kami teruskan ke driver web Chrome nanti.

Anda dapat menjalankan Google Chrome dalam mode tanpa kepala hanya dengan menyetel tanpa kepala milik dari chromeOptions objek untuk Benar.

Atau, Anda dapat menggunakan tambahkan_argumen() metode chromeOptions objek untuk menambahkan -tanpa kepala argumen baris perintah untuk menjalankan Google Chrome dalam mode tanpa kepala menggunakan driver web Selenium Chrome.

Anda dapat menggunakan webdriver.Chrome() metode untuk menginisialisasi/menjalankan browser web Google Chrome dari Selenium. Itu executable_path argumen digunakan untuk memberi tahu Selenium untuk menggunakan chromedriver biner dari pengemudi/ direktori proyek. Itu pilihan 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 peramban obyek. Kita dapat menggunakannya untuk mengontrol instance Google Chrome nanti.

Itu peramban.Dapatkan() metode memuat linuxhint.com situs web di browser web Google Chrome di latar belakang (dalam mode tanpa kepala).

Setelah halaman dimuat, peramban.judul properti akan memiliki judul situs web. Python mencetak() metode mencetak judul situs web di konsol.

Kemudian, peramban.berhenti() metode menutup browser web Google Chrome.

Untuk menguji apakah Selenium dapat bekerja dalam mode 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 mode grafis.

Hanya untuk menunjukkan kepada Anda bahwa itu berfungsi dari server tanpa kepala Linux (di mana tidak ada antarmuka pengguna grafis yang diinstal), saya telah menjalankan skrip Python ex01.py di Ubuntu Server 20.04 LTS. Seperti yang Anda lihat, skripnya 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 mode tanpa kepala.

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

Untuk mengetahui struktur HTML daftar, Anda harus membuka Alat Pengembang Chrome. Untuk melakukannya, tekan tombol kanan mouse (RMB) pada halaman dan klik click Memeriksa atau tekan + + saya.

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

Kemudian, arahkan kursor ke daftar Nama acak. 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 in Elemen tab dari Alat Pengembang Chrome. Di sini, daftar nama Acak ada di dalam div elemen. Itu div elemen memiliki kelas nama hasil. Di dalamnya, kami memiliki ol elemen dengan kelas nama Daftar nama. Di dalam ol elemen, masing-masing nama ada di a li elemen.

Dari sini kita dapat mengatakan bahwa untuk sampai ke li tag, kita harus mengikuti div.hasil > ol.Daftar nama > li

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

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

dari selenium impor webdriver
dari selenium.webdriver.umum.kunci impor Kunci
dari selenium.webdriver.krom.opsi impor Opsi
chromeOptions = Opsi()
chromeOptions.tanpa kepala = Benar
browser = webdriver.Chrome(executable_path="./driver/chromedriver", opsi = chromeOptions)
peramban.get("http://random-name-generator.info/")
Daftar nama = browser =.find_elements_by_css_selector('div.hasil ol.Daftar nama li')
untuk nama di nameList:
cetak(nama.teks)
peramban.berhenti()

Setelah selesai, simpan ex02.py skrip python.

Saya telah menjelaskan baris 1-8 di bagian awal artikel ini. Ini sama seperti di ex01.py.

Baris 10 memuat situs web generator nama acak menggunakan peramban.Dapatkan() metode.

Baris 11 memilih daftar nama menggunakan peramban.find_elements_by_css_selector() metode. Metode ini menggunakan pemilih CSS div.hasil ol.namaDaftar li untuk menemukan daftar nama. Kemudian, daftar nama disimpan di Daftar nama variabel.

Pada baris 13 dan 14, a untuk loop digunakan untuk iterasi melalui Daftar nama Daftar li elemen. Dalam setiap iterasi, isi dari li elemen dicetak di 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 ini.

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

Anda telah melihat sebelumnya bahwa menjalankan Selenium dalam mode tanpa kepala menggunakan driver Chrome semudah mengatur chromeOptions.tanpa kepala bendera ke Benar.

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 mode 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 mode tanpa kepala menggunakan driver web Chrome. Anda dapat menonaktifkan kotak pasir untuk Google Chrome dengan menggunakan using -tanpa kotak pasir bendera.

Untuk menambahkan -tanpa kotak pasir flag, tambahkan baris berikut sebelum menginisialisasi driver Selenium Chrome menggunakan webdriver.Chrome() metode (baris 8 di ex01.py skrip python).

chromeOptions.add_argument("--tanpa-kotak pasir")

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 mode 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 mode tanpa kepala menggunakan -ukuran jendela opsi baris perintah.

Misalnya, untuk mengatur lebar layar virtual ke 1280 piksel dan tinggi ke 720 piksel, Tambahkan -ukuran jendela opsi baris perintah sebelum menginisialisasi driver Selenium Chrome menggunakan webdriver.Chrome() metode (baris 8 di ex01.py skrip Python) sebagai berikut:

chromeOptions.add_argument("--ukuran-jendela=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 akan 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 mode tanpa kepala. Untuk mengatasi masalah ini, Anda harus menonaktifkan akselerasi GPU menggunakan -nonaktifkan-gpu bendera.

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

chromeOptions.add_argument("-disable-gpu")

Kesimpulan:

Pada artikel ini, saya telah menunjukkan kepada Anda cara mengatur Selenium dalam mode 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 baris perintah Google Chrome yang dapat Anda gunakan untuk menyelesaikan beberapa masalah yang mungkin Anda miliki saat menjalankan Selenium dalam mode tanpa kepala menggunakan driver web Chrome.

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

5 Produk Mouse Komputer Ergonomis Terbaik untuk Linux
Apakah penggunaan komputer yang lama menyebabkan rasa sakit di pergelangan tangan atau jari Anda?? Apakah Anda menderita persendian yang kaku dan teru...
Cara Mengubah Pengaturan Mouse dan Touchpad Menggunakan Xinput di Linux
Sebagian besar distribusi Linux dikirimkan dengan pustaka "libinput" secara default untuk menangani kejadian input pada sistem. Ini dapat memproses ke...
Petakan ulang tombol mouse Anda secara berbeda untuk perangkat lunak yang berbeda dengan Kontrol Tombol X-Mouse
Mungkin Anda membutuhkan alat yang dapat membuat kontrol mouse Anda berubah dengan setiap aplikasi yang Anda gunakan. Jika demikian, Anda dapat mencob...