Selenium

Cara Menunggu Halaman Dimuat dengan Selenium

Cara Menunggu Halaman Dimuat dengan Selenium
Saat otomatisasi web atau pengikisan web dengan driver web Selenium, Anda mungkin menghadapi masalah seperti elemen yang ingin Anda pilih tidak tersedia atau tombol yang ingin Anda tekan tidak siap untuk diklik dan sebagainya.

Alasan ini terjadi adalah karena driver web Selenium harus mengunduh halaman web dan menyelesaikan rendering halaman sebelum Anda dapat melakukan apa pun di dalamnya. Di masa lalu, server web membuat konten situs web, dan browser baru saja mengunduhnya dan merendernya. Saat ini kami memiliki banyak aplikasi web satu halaman yang bekerja sedikit berbeda. Di Aplikasi Web Halaman Tunggal (SPA), server web hanya melayani kode frontend. Setelah kode frontend dirender di browser, kode frontend menggunakan AJAX untuk meminta data API ke server web. Setelah frontend menerima data API, itu membuat mereka di browser. Jadi, meskipun browser telah selesai mengunduh dan merender halaman web, halaman webnya masih belum siap. Anda harus menunggunya untuk menerima data API dan merendernya juga. Jadi, solusi untuk masalah ini adalah menunggu data tersedia sebelum kita melakukan apa pun dengan Selenium.

Di Selenium, ada 2 jenis menunggu:
1) Penantian implisit
2) Penantian eksplisit

1) Penantian implisit: Ini adalah yang paling mudah untuk diterapkan. Penantian implisit memberi tahu driver web Selenium untuk menunggu beberapa detik hingga DOM (model objek dokumen) siap (halaman web siap).

2) Penantian eksplisit: Ini sedikit rumit daripada penantian implisit. Dalam menunggu eksplisit, Anda memberi tahu driver web Selenium apa yang harus ditunggu. Selenium menunggu kondisi spesifik itu terpenuhi. Setelah terpenuhi, driver web Selenium akan siap untuk mengambil perintah lain. Biasanya, waktu tunggu eksplisit adalah variabel. Itu tergantung pada seberapa cepat kondisi terpenuhi. Dalam skenario terburuk, penantian eksplisit akan menunggu selama penantian implisit.

Pada artikel ini, saya akan menunjukkan kepada Anda bagaimana menunggu (implisit dan eksplisit) untuk memuat halaman dengan Selenium. Jadi, mari kita mulai.

Prasyarat:

Untuk mencoba perintah dan contoh 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) Python virtualenv paket terinstal di komputer Anda.
5) Mozilla Firefox atau browser web Google Chrome terpasang di komputer Anda.
6) Harus tahu cara menginstal Driver Firefox Gecko atau Driver Web Chrome.

Untuk memenuhi persyaratan 4, 5, dan 6, baca artikel saya Pengenalan Selenium dengan Python 3 di Linuxhint.com.

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

Menyiapkan Direktori Proyek:

Untuk menjaga semuanya tetap teratur, buat direktori proyek baru selenium-tunggu/ sebagai berikut:

$ mkdir -pv selenium-tunggu/driver

Navigasikan ke selenium-tunggu/ direktori proyek sebagai berikut:

$ cd selenium-tunggu/

Buat lingkungan virtual Python di direktori proyek sebagai berikut:

$ virtualenv .venv

Aktifkan lingkungan virtual sebagai berikut:

$ sumber .venv/bin/aktifkan

Instal Selenium menggunakan PIP3 sebagai berikut:

$pip3 instal selenium

Unduh dan instal semua driver web yang diperlukan di pengemudi/ direktori proyek. Saya telah menjelaskan proses mengunduh dan menginstal driver web di artikel saya Pengenalan Selenium dengan Python 3. Jika Anda memerlukan bantuan, cari di LinuxPetunjuk.com untuk artikel itu.

Saya akan menggunakan browser web Google Chrome untuk demonstrasi di artikel ini. Jadi, saya akan menggunakan chromedriver biner dari pengemudi/ direktori.

Bekerja dengan Tunggu Implisit:

Untuk bereksperimen dengan menunggu implisit, buat skrip Python baru ex01.py di direktori proyek Anda dan ketik baris kode berikut di file itu that.

dari selenium impor webdriver
dari selenium.webdriver.umum.kunci impor Kunci
pilihan = webdriver.Opsi Chrome()
pilihan.tanpa kepala = Benar
browser = webdriver.Chrome(executable_path="./driver/chromedriver", opsi = opsi)
peramban.implisit_tunggu(10)
peramban.dapatkan("https://www.unixtimestamp.com/")
stempel waktu = browser.find_element_by_xpath("//h3[@class='text-danger'][1]")
print('Stempel waktu saat ini: %s' % (stempel waktu.teks.membagi (")[0]))
peramban.Menutup()

Setelah selesai, simpan ex01.py skrip python.

Baris 1 dan 2 mengimpor semua komponen Selenium yang diperlukan.

Baris 4 membuat objek Opsi Chrome.

Baris 5 mengaktifkan mode tanpa kepala untuk driver web Chrome.

Baris 7 membuat objek browser Chrome menggunakan chromedriver biner dari pengemudi/ direktori.

Baris 8 digunakan untuk memberitahu Selenium untuk menunggu secara implisit selama 10 detik menggunakan using implisit_tunggu() metode peramban.

Baris 10 memuat www.unixtimestamp.com di browser.

Baris 12 menemukan elemen stempel waktu menggunakan pemilih XPath //h3[@class='text-danger'][1] dan menyimpannya di stempel waktu variabel.

Saya mendapatkan pemilih XPath dari Alat Pengembang Chrome. Seperti yang Anda lihat, stempel waktu ada di yang pertama h3 elemen dengan nama kelas bahaya teks. Ada 2 h3 elemen dengan kelas bahaya teks.

Baris 13 hanya mencetak stempel waktu dari elemen yang telah saya pilih menggunakan pemilih XPath dan disimpan di stempel waktu variabel.

Baris 14 menutup browser.

Setelah selesai, jalankan skrip Python ex01.py sebagai berikut:

$ python3 ex01.py

Seperti yang Anda lihat, stempel waktu saat ini diekstraksi dari unixtimestamp.com dan dicetak di konsol.

Bekerja dengan Tunggu Eksplisit:

Untuk bereksperimen dengan menunggu eksplisit, buat skrip Python baru ex02.py di direktori proyek Anda dan ketik baris kode berikut di file itu that.

dari selenium impor webdriver
dari selenium.webdriver.umum.kunci impor Kunci
dari selenium.webdriver.umum.dengan mengimpor Oleh
dari selenium.webdriver.dukung.ui mengimpor WebDriverTunggu
dari selenium.webdriver.mendukung impor ekspektasi_kondisi
pilihan = webdriver.Opsi Chrome()
pilihan.tanpa kepala = Benar
browser = webdriver.Chrome(executable_path="./driver/chromedriver", opsi = opsi)
peramban.dapatkan("https://www.unixtimestamp.com/")
mencoba:
timestamp = WebDriverWait(browser, 10).sampai(
diharapkan_kondisi.kehadiran_of_element_located((Oleh.XPATH, "
//h3[@class='text-danger'][1]"))
)
print('Stempel waktu saat ini: %s' % (stempel waktu.teks.membagi (")[0]))
akhirnya:
peramban.Menutup()

Setelah selesai, simpan ex02.py skrip python.

Baris 1-5 mengimpor semua komponen yang diperlukan dari perpustakaan Selenium.

Baris 7 membuat objek Opsi Chrome.

Baris 8 mengaktifkan mode tanpa kepala untuk driver web Chrome.

Baris 10 membuat objek browser Chrome menggunakan chromedriver biner dari pengemudi/ direktori.

Baris 12 memuat www.unixtimestamp.com di browser.

Penantian eksplisit diimplementasikan di blok try-finally (dari baris 14-20)

Baris 15-17 menggunakan create WebDriverTunggu() obyek. Argumen pertama dari WebDriverTunggu() adalah objek browser, dan argumen kedua adalah waktu maksimum yang diizinkan (skenario terburuk) untuk memenuhi kondisi, yaitu 10 detik dalam kasus ini.

Dalam sampai() blok, diharapkan_kondisi.kehadiran_of_element_located() metode ini digunakan untuk memastikan bahwa elemen ada sebelum mencoba memilih elemen select. Sini, Oleh.XPATH digunakan untuk memberitahu kehadiran_of_element_located() metode yang kami gunakan pemilih XPath untuk memilih elemen. Pemilih XPath adalah //h3[@class='text-danger'][1].

Setelah elemen ditemukan, itu disimpan di in stempel waktu variabel.

Baris 18 hanya mencetak stempel waktu dari elemen yang dipilih.

Akhirnya, baris 19-20 menutup browser.

Setelah selesai, jalankan run ex02.py Script Python sebagai berikut:

$ python3 ex02.py

Seperti yang Anda lihat, stempel waktu saat ini dari unixtimestamp.com dicetak di konsol.

Memilih Elemen di Explicit Waits:

Di bagian sebelumnya, saya telah menggunakan Oleh.XPATH untuk memilih elemen menggunakan pemilih XPath. Anda juga dapat memilih elemen menggunakan ID, nama tag, nama kelas CSS, pemilih CSS, dll.

Metode pemilihan yang didukung diberikan di bawah ini:

Oleh.XPATH - Memilih elemen/elemen menggunakan pemilih XPath.

Oleh.NAMA KELAS - Memilih elemen/elemen menggunakan nama kelas CSS.

Oleh.CSS_SELECTOR - Memilih elemen/elemen menggunakan pemilih CSS.

Oleh.Indo - Memilih elemen berdasarkan ID

Oleh.NAMA - Memilih elemen/elemen berdasarkan nama.

Oleh.TAG_NAME - Memilih elemen/elemen berdasarkan nama tag HTML.

Oleh.LINK_TEXT - Memilih elemen/elemen berdasarkan teks tautan dari Sebuah (jangkar) tag HTML.

Oleh.PARTIAL_LINK_TEXT - Memilih elemen/elemen dengan teks tautan parsial dari Sebuah (jangkar) tag HTML.

Untuk informasi lebih lanjut tentang ini, kunjungi Halaman Dokumentasi Python Selenium API.

Kondisi yang Diharapkan dalam Penantian Eksplisit:

Dalam contoh tunggu eksplisit sebelumnya, saya telah menggunakan kehadiran_of_element_located() metode dari diharapkan_kondisi sebagai kondisi tunggu eksplisit untuk memastikan bahwa elemen yang saya cari memang ada sebelum memilihnya.

Ada yang lain diharapkan_kondisi Anda dapat menggunakan sebagai kondisi tunggu eksplisit. Beberapa dari mereka adalah:

title_is(judul) - memeriksa apakah judul halaman adalah judul.

title_contains(judul_sebagian) - memeriksa apakah judul halaman berisi bagian dari judul parsial_judul.

visibilitas_of(elemen) - memeriksa apakah elemen terlihat pada halaman yang merupakan elemen memiliki lebar dan tinggi lebih besar dari 0.

visibilitas_of_element_located(pencari) -

kehadiran_of_element_located(pencari) - Pastikan bahwa elemen terletak (oleh pencari lokasi) ada di halaman. Itu pencari lokasi adalah tupel dari (Oleh, pemilih), seperti yang saya tunjukkan dalam contoh tunggu eksplisit.

kehadiran_of_semua_elemen_lokasi() - Memastikan bahwa semua elemen cocok dengan pencari lokasi hadir di halaman. Itu pencari lokasi adalah (Oleh, pemilih) tupel.

text_to_be_present_in_element(pencari, teks) - Memeriksa apakah teks hadir dalam elemen yang terletak oleh pencari lokasi. Itu pencari lokasi adalah (Oleh, pemilih) tupel.

element_to_be_clickable(pencari lokasi) - Memeriksa apakah elemen terletak oleh pencari lokasi terlihat dan dapat diklik. Itu pencari lokasi adalah (Oleh, pemilih) tupel.

element_to_be_selected(pencari lokasi) - Memeriksa apakah elemen terletak oleh pencari lokasi dipilih. Itu pencari lokasi adalah (Oleh, pemilih) tupel.

alert_is_present() - mengharapkan dialog peringatan hadir di halaman.

Masih banyak lagi diharapkan_kondisi tersedia untuk Anda gunakan. Untuk informasi lebih lanjut tentang ini, kunjungi Halaman Dokumentasi Python Selenium API.

Kesimpulan:

Dalam artikel ini, saya telah membahas penantian implisit dan eksplisit Selenium. Saya juga telah menunjukkan kepada Anda cara bekerja dengan penantian implisit dan eksplisit. Anda harus selalu mencoba menggunakan waktu tunggu eksplisit dalam proyek Selenium Anda karena Selenium akan mencoba mengurangi waktu tunggu sebanyak mungkin. Dengan cara ini, Anda tidak perlu menunggu beberapa detik tertentu setiap kali Anda menjalankan proyek Selenium Anda. Penantian eksplisit seharusnya menghemat banyak detik.

Untuk informasi lebih lanjut tentang Selenium waits, kunjungi halaman Dokumentasi Selenium Python Library waits resmi.

Pertempuran untuk Tutorial Westnoth
The Battle for Wesnoth adalah salah satu game strategi open source terpopuler yang bisa kamu mainkan saat ini. Tidak hanya game ini telah dikembangkan...
0 A.D. tutorial
Dari sekian banyak game strategi di luar sana, 0 A.D. berhasil menonjol sebagai judul yang komprehensif dan permainan taktis yang sangat dalam meskipu...
Tutorial Unity3D
Pengantar Unity 3D Unity 3D adalah mesin pengembangan game yang tangguh. Ini adalah lintas platform yang memungkinkan Anda membuat game untuk seluler,...