Selenium

Menjalankan Selenium Headless dengan Chrome

Menjalankan Selenium Headless dengan Chrome
Sekiranya anda ingin melakukan automasi web Selenium atau pemecahan web dengan penyemak imbas web Chrome, ia menjalankan versi grafik penyemak imbas web Chrome secara lalai. Tidak menjadi masalah ketika anda menjalankan skrip Selenium anda dari persekitaran desktop grafik Linux (i.e., GNOME 3, KDE, XFCE4). Tetapi jika anda ingin menjalankan skrip Selenium anda dalam persekitaran tanpa kepala (i.e., Pelayan Ubuntu, CentOS / RHEL Server) di mana anda tidak mempunyai persekitaran desktop grafik, maka ini tidak akan berfungsi.

Nasib baik, anda boleh mengkonfigurasi Selenium untuk menjalankan penyemak imbas web Chrome dalam mod tanpa kepala. Dalam mod ini, penyemak imbas web Chrome akan berjalan tanpa antara muka pengguna grafik. Jadi, Selenium boleh melakukan automasi web, pemecahan web, ujian penyemak imbas, dll. menggunakan penyemak imbas web Chrome di pelayan Linux di mana anda tidak mempunyai persekitaran desktop grafik.

Dalam artikel ini, saya akan menunjukkan kepada anda cara menjalankan Selenium dengan penyemak imbas web Chrome dalam mod tanpa kepala. Saya akan menggunakan perpustakaan Selenium Python dan menulis skrip Selenium menggunakan bahasa pengaturcaraan Python 3. Oleh itu, mari kita mulakan.

Prasyarat:

Untuk mencuba perintah dan contoh dari artikel ini, anda mesti ada,

1) Sebaran Linux (sebaiknya Ubuntu) dipasang di komputer anda.
2) Python 3 dipasang pada komputer anda.
3) PIP 3 dipasang pada komputer anda.
4) Google Chrome dipasang di komputer anda.

Anda boleh menemui banyak artikel mengenai topik ini di LinuxHint.com. Pastikan anda memeriksanya jika anda memerlukan bantuan.

Menyiapkan Persekitaran Maya Python 3 untuk Projek:

Persekitaran Maya Python digunakan untuk membuat direktori projek Python yang terpencil. Modul Python yang anda pasang menggunakan PIP akan dipasang di direktori projek sahaja, bukan di peringkat global.

Python virtualenv modul digunakan untuk menguruskan persekitaran maya Python.

Anda boleh memasang Python virtualenv modul secara global menggunakan PIP 3 seperti berikut:

$ sudo pip3 pasang virtualenv

Python virtualenv harus dipasang.

Buat direktori projek tanpa kepala krom / dalam direktori kerja semasa anda seperti berikut:

$ mkdir -pv chrome-headless / pemacu

Navigasi ke direktori projek yang baru anda buat tanpa kepala krom / seperti berikut:

$ cd tanpa kepala krom /

Buat persekitaran maya Python di direktori projek anda dengan arahan berikut:

$ virtualenv .venv

Persekitaran maya Python harus dibuat di .tempat / direktori di direktori projek anda.

Aktifkan persekitaran maya Python dari direktori projek anda dengan arahan berikut:

sumber $ .venv / bin / aktifkan

Memasang Selenium Python Library:

Perpustakaan Selenium boleh didapati di repositori Python PyPI rasmi.

Anda boleh memasang perpustakaan Selenium Python menggunakan PIP 3 seperti berikut:

$ pip3 memasang selenium

Perpustakaan Selenium Python harus dipasang.

Memasang Pemacu Web Chrome:

Pemandu Web Chrome akan membolehkan anda mengawal atau mengautomasikan penyemak imbas web Google Chrome dari Selenium.

Di bahagian ini, saya akan menunjukkan kepada anda cara memasang Pemacu Web Chrome.

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

Setelah halaman dimuat, anda akan menemui nombor versi Google Chrome di Mengenai Chrome bahagian. Perhatikan 3 bahagian pertama nombor versi seperti yang ditandakan pada tangkapan skrin di bawah.

Untuk memuat turun Pemandu Web Chrome, lawati halaman muat turun Pemandu Chrome rasmi.

Di dalam Keluaran Semasa bahagian, Pemandu Web Chrome untuk pelepasan terkini penyemak imbas web Google Chrome semestinya tersedia, seperti yang anda lihat dalam tangkapan skrin di bawah. Salah satu keluaran Pemandu Web Chrome semasa harus mempunyai nombor versi yang sepadan dengan penyemak imbas web Google Chrome anda. 3 bahagian pertama nombor versi Pemacu Web Chrome dan penyemak imbas web Google Chrome mesti sepadan.

Sekiranya versi yang anda cari tidak ada di Keluaran semasa bahagian, tatal ke bawah sedikit, dan anda pasti dapat mencarinya.

Setelah anda mengklik nombor versi Pemacu Web Chrome, ia akan dibawa ke halaman muat turunnya. Klik pada chromedriver_linux64.zip fail dari sini.

Arkib Pemandu Web Chrome harus dimuat turun.

Yang dimuat turun chromedriver_linux64.zip fail mesti ada di dalam anda ~ / Muat turun direktori.

$ ls -lh ~ / Muat turun

Ekstrak chromedriver_linux64.zip arkib dari ~ / Muat turun direktori ke pemandu / direktori projek anda seperti berikut:

$ unzip ~ / Muat turun / chromedriver_linux64.pemacu zip -d /

Fail baru kromedriver harus dibuat di pemandu / direktori projek anda setelah arkib Pemandu Web Chrome diekstrak, seperti yang anda lihat dalam tangkapan skrin di bawah.

Menguji Pemandu Web Chrome dalam Mod Tanpa Kepala:

Di bahagian ini, saya akan menunjukkan kepada anda cara menjalankan Selenium menggunakan Pemacu Chrome dalam mod tanpa kepala.

Pertama, buat skrip Python baru ex01.py dalam direktori projek anda dan taipkan baris kod berikut di dalamnya.

dari pemacu web import selenium
dari selenium.pemacu laman web.biasa.kunci import Kekunci
dari selenium.pemacu laman web.krom.pilihan import Pilihan
chromeOptions = Pilihan ()
chromeOptions.tanpa kepala = Betul
penyemak imbas = pemacu web.Chrome (executable_path = "./ driver / chromedriver ", options = chromeOptions)
penyemak imbas.dapatkan ("http: // linuxhint.com ")
cetak ("Tajuk:% s"% penyemak imbas.tajuk)
penyemak imbas.berhenti ()

Setelah selesai, simpan ex01.py Skrip Python.

Garis-garis ini mengimport semua barang yang diperlukan dari selenium perpustakaan.

Seperti yang saya katakan sebelumnya, secara lalai, pemacu Chrome cuba menjalankan Google Chrome dalam mod grafik. Untuk menjalankan Google Chrome dalam mod tanpa kepala, kita harus memberitahu pemandu Chrome untuk memberikan beberapa pilihan tambahan. Garis ini mencipta Pilihan objek yang boleh kita sampaikan ke pemacu web Chrome kemudian.

Anda boleh menjalankan Google Chrome dalam mod tanpa kepala hanya dengan menetapkan tanpa kepala harta tanah chromeOptions objek ke Betul.

Atau, anda boleh menggunakan add_argument () kaedah chromeOptions objek untuk menambah -tanpa kepala argumen baris perintah untuk menjalankan Google Chrome dalam mod tanpa kepala menggunakan pemacu web Selenium Chrome.

Anda boleh menggunakan a pemacu laman web.Chrome () kaedah untuk memulakan / menjalankan penyemak imbas web Google Chrome dari Selenium. The jalan yang boleh dilaksanakan hujah digunakan untuk menyuruh Selenium menggunakan kromedriver binari dari pemandu / direktori projek. The pilihan hujah memberitahu Selenium untuk menggunakan pilihan tersuai kami chromeOptions.

Setelah Selenium menjalankan penyemak imbas web Google Chrome menggunakan Pemacu Web Selenium Chrome, ia mengembalikan a penyemak imbas objek. Kita dapat menggunakannya untuk mengawal instance Google Chrome nanti.

The penyemak imbas.dapatkan () kaedah memuatkan linuxhint.com laman web dalam penyemak imbas web Google Chrome di latar belakang (dalam mod tanpa kepala).

Setelah halaman dimuat, penyemak imbas.tajuk harta tanah akan mempunyai tajuk laman web. The Python cetak () kaedah mencetak tajuk laman web di konsol.

Kemudian, penyemak imbas.berhenti () kaedah menutup penyemak imbas web Google Chrome.

Untuk menguji sama ada Selenium boleh berfungsi dalam mod tanpa kepala, jalankan skrip Python ex01.py seperti berikut:

$ python3 ex01.py

Ia harus mencetak tajuk laman web di konsol tanpa membuka penyemak imbas web Google Chrome dalam mod grafik.

Hanya untuk menunjukkan bahawa ia berfungsi dari pelayan tanpa kepala Linux (di mana tidak ada antara muka pengguna grafik yang dipasang), saya telah menjalankan skrip Python ex01.py pada Ubuntu Server 20.04 LTS. Seperti yang anda lihat, skripnya berfungsi dengan baik.

Mengikis Web dengan Selenium dalam Mod Tanpa Kepala menggunakan Pemacu Web Chrome:

Di bahagian ini, saya akan menunjukkan kepada anda contoh pemecahan web di Selenium menggunakan pemacu web Chrome dalam mod tanpa kepala.

Mula-mula, lawati penjana nama rawak.maklumat dari Google Chrome atau penyemak imbas web lain. Laman web ini akan menghasilkan 10 nama rawak setiap kali anda memuatkan semula halaman, seperti yang anda lihat dalam tangkapan skrin di bawah. Tujuan kami adalah untuk mengekstrak nama-nama rawak ini menggunakan Selenium dalam mod tanpa kepala.

Untuk mengetahui struktur HTML senarai, anda harus membuka Alat Pembangun Chrome. Untuk melakukannya tekan butang kanan tetikus (RMB) di halaman dan klik Periksa atau tekan + + Saya.

Alat Pembangun Chrome hendaklah dibuka. Klik pada Periksa ikon () seperti yang ditandakan pada tangkapan skrin di bawah.

Kemudian, arahkan kursor ke senarai Nama rawak. Senarai harus diserlahkan seperti yang ditandakan pada tangkapan skrin di bawah. Kemudian, tekan butang kiri tetikus (LMB) untuk memilih senarai.

Kod HTML senarai harus diserlahkan di Unsur tab dari Alat Pembangun Chrome. Di sini, senarai nama Rawak ada di dalam a div unsur. The div unsur mempunyai kelas nama hasil. Di dalamnya, kita mempunyai ol unsur dengan kelas nama senarai nama. Di dalam ol unsur, setiap nama berada dalam a li unsur.

Dari ini kita dapat mengatakan bahawa untuk sampai ke li tag, kita mesti ikut div.hasil> ol.senarai nama> li

Jadi, pemilih CSS kami akan menjadi div.hasil ol.namaSenarai li (ganti sahaja > tanda dengan ruang kosong)

Untuk mengekstrak nama rawak ini, buat skrip Python baru ex02.py dan taipkan baris kod berikut di dalamnya.

dari pemacu web import selenium
dari selenium.pemacu laman web.biasa.kunci import Kekunci
dari selenium.pemacu laman web.krom.pilihan import Pilihan
chromeOptions = Pilihan ()
chromeOptions.tanpa kepala = Betul
penyemak imbas = pemacu web.Chrome (executable_path = "./ driver / chromedriver ", options = chromeOptions)
penyemak imbas.dapatkan ("http: // rawak-nama-penjana.maklumat / ")
nameList = penyemak imbas.find_elements_by_css_selector ('div.hasil ol.namaSenarai li ')
untuk nama dalam namaSenarai:
mencetak (nama.teks)
penyemak imbas.berhenti ()

Setelah selesai, simpan ex02.py Skrip Python.

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

Baris 10 memuatkan laman web penjana nama rawak menggunakan penyemak imbas.dapatkan () kaedah.

Baris 11 memilih senarai nama menggunakan penyemak imbas.cari_elemen_by_css_selector () kaedah. Kaedah ini menggunakan pemilih CSS div.hasil ol.namaSenarai li untuk mencari senarai nama. Kemudian, senarai nama disimpan di senarai nama pemboleh ubah.

Dalam baris 13 dan 14, a untuk gelung digunakan untuk melakukan lelaran melalui senarai nama senarai li unsur. Dalam setiap lelaran, kandungan li elemen dicetak pada konsol.

Sekarang, jalankan skrip Python ex02.py seperti berikut:

$ python3 ex02.py

Seperti yang anda lihat, skrip Python ex02.py mengambil semua nama rawak dari laman web.

Sekiranya anda menjalankan skrip kali kedua, ia akan mengembalikan senarai nama rawak baru, seperti yang anda lihat dalam tangkapan skrin di bawah.

Masalah yang Mungkin Anda hadapi Menjalankan Selenium dalam Mod Tanpa Kepala:

Anda telah melihat sebelumnya bahawa menjalankan Selenium dalam mod tanpa kepala menggunakan pemacu Chrome semudah menetapkan chromeOptions.tanpa kepala bendera ke Betul.

Penyelesaian ini mungkin tidak berfungsi untuk anda pada sebilangan distribusi Linux. Di bahagian ini, saya akan membincangkan beberapa masalah yang mungkin anda hadapi semasa menjalankan Selenium dalam mod tanpa kepala menggunakan pemacu web Chrome.

Secara lalai, penyemak imbas web Google Chrome melakukan banyak kotak pasir (menjalankan banyak perkara di persekitaran terpencil). Ini boleh menyebabkan masalah semasa menjalankan Selenium dalam mod tanpa kepala menggunakan pemacu web Chrome. Anda boleh mematikan kotak pasir untuk Google Chrome dengan menggunakan -tiada kotak pasir bendera.

Untuk menambah -tiada kotak pasir bendera, tambahkan baris berikut sebelum memulakan pemacu Chrome Selenium menggunakan pemacu laman web.Chrome () kaedah (baris 8 dalam ex01.py Skrip Python).

chromeOptions.add_argument ("- no-sandbox")

Anda mungkin menghadapi masalah melakukan perkara tertentu dalam penyemak imbas web Google Chrome dari Selenium seperti mengambil tangkapan skrin laman web dan sebagainya. Ini mungkin berlaku kerana, dalam mod tanpa kepala, Google Chrome mungkin menetapkan resolusi skrin maya yang salah. Jadi, laman web anda mungkin tidak kelihatan betul. Anda boleh menetapkan resolusi skrin maya yang anda inginkan untuk penyemak imbas web Google Chrome dalam mod tanpa kepala menggunakan -saiz tingkap pilihan baris perintah.

Sebagai contoh, untuk menetapkan lebar skrin maya ke 1280 piksel dan tinggi ke 720 piksel, tambah -saiz tingkap pilihan baris arahan sebelum memulakan pemacu Chrome Selenium menggunakan pemacu laman web.Chrome () kaedah (baris 8 dalam ex01.py Skrip Python) seperti berikut:

chromeOptions.add_argument ("- ukuran tetingkap = 1280,720")

Pelayan anda mungkin tidak memasang GPU, atau mungkin mempunyai GPU yang tidak akan diketahui oleh penyemak imbas web Google Chrome. Secara lalai, Google Chrome harus mematikan percepatan GPU secara automatik jika GPU tidak tersedia atau jika GPU yang tidak disokong tersedia. Dalam beberapa kes, ia mungkin gagal dilakukan. Sekiranya demikian, Selenium mungkin tidak dapat menjalankan penyemak imbas web Google Chrome dalam mod tanpa kepala. Untuk menyelesaikan masalah ini, anda harus mematikan percepatan GPU menggunakan -lumpuhkan-gpu bendera.

Untuk menambah -lumpuhkan-gpu bendera, tambahkan baris berikut sebelum memulakan pemacu Chrome Selenium menggunakan pemacu laman web.Chrome () kaedah (baris 8 dalam ex01.py Skrip Python).

chromeOptions.add_argument (“- disable-gpu”)

Kesimpulan:

Dalam artikel ini, saya telah menunjukkan kepada anda cara mengatur Selenium dalam mod tanpa kepala menggunakan pemacu web Chrome. Saya telah membahas asas-asasnya, yang akan membantu anda memulakan automasi penyemak imbas Selenium tanpa kepala, pengujian web, dan pengikisan web.

Saya juga telah membahas beberapa argumen / bendera baris perintah Google Chrome yang boleh anda gunakan untuk menyelesaikan beberapa masalah yang mungkin anda alami semasa menjalankan Selenium dalam mod tanpa kepala menggunakan pemacu web Chrome.

Terdapat banyak lagi pilihan baris perintah Google Chrome yang tersedia, yang tidak saya bahas dalam artikel ini. Pilihan baris arahan ini mungkin berguna untuk projek anda. Anda boleh mendapatkan semua pilihan baris perintah Google Chrome yang disokong dalam halaman Senarai Tukar Garis Perintah Chromium oleh Peter Beverloo.

Cara Meningkatkan FPS di Linux?
FPS bermaksud Bingkai sesaat. Tugas FPS adalah mengukur kadar bingkai dalam pemutaran video atau persembahan permainan. Dengan kata mudah bilangan gam...
Permainan Makmal Apl Oculus Teratas
Sekiranya anda adalah pemilik alat dengar Oculus, maka anda mesti mengetahui tentang memuatkan sideload. Sideloading adalah proses memasang kandungan ...
10 Permainan Teratas untuk Dimainkan di Ubuntu
Platform Windows telah menjadi salah satu platform dominan untuk permainan kerana peratusan besar permainan yang sedang berkembang hari ini untuk meny...