Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Selenium WebDriverWait Saya Gagal Mencari Elemen dalam Tetingkap yang Baru Dibuka?

Mengapa Selenium WebDriverWait Saya Gagal Mencari Elemen dalam Tetingkap yang Baru Dibuka?

Barbara Streisand
Barbara Streisandasal
2024-12-21 19:30:11158semak imbas

Why is My Selenium WebDriverWait Failing to Find Elements in a Newly Opened Window?

WebDriverWait Tidak Berfungsi Seperti Diramalkan

Anda menggunakan selenium untuk mengekstrak data daripada halaman web. Halaman ini mengandungi butang "custom_cols" yang melancarkan tetingkap untuk pemilihan lajur. Tetingkap baharu ini kadangkala mengambil masa beberapa saat (khususnya, sekitar 5 saat) untuk dimuatkan.

Untuk menangani kelewatan ini, anda telah menggunakan WebDriverWait dengan kelewatan 20 saat. Anehnya, ia kadang-kadang gagal untuk mengesan elemen dalam tetingkap baharu, walaupun elemen tersebut dipaparkan pada skrin. Isu ini berlaku kira-kira sekali setiap sepuluh percubaan.

Menariknya, menggunakan WebDriverWait di tempat lain dalam kod anda berfungsi seperti yang diharapkan, memastikan elemen kelihatan sebelum mengkliknya.

Pertanyaan anda berkisar tentang mengapa elemen dalam kod baharu tetingkap tidak dikenali sebagai kelihatan walaupun menggunakan WebDriverWait untuk mengesannya keterlihatan.

Cadangan Penyelesaian:

Masalahnya berpunca daripada fakta bahawa anda menggunakan kaedah presence_of_element_located() WebDriverWait dan bukannya kaedah element_to_be_clickable() apabila cuba mengklik elemen.

Untuk menangani perkara ini, gantikan yang berikut talian:

myElem = WebDriverWait(self.browser, delay).until(EC.presence_of_element_located((By.XPATH , xpath)))

dengan:

myElem = WebDriverWait(self.browser, delay).until(EC.element_to_be_clickable((By.XPATH , xpath)))

Memahami Kaedah WebDriverWait:

Berikut memberikan penjelasan lanjut mengenai tiga yang disebut kaedah:

  1. presence_of_element_located: Mengesahkan kehadiran elemen pada DOM halaman web, tanpa mengira keterlihatan atau kebolehinteraksiannya.
  2. visibility_of_element_located: Memastikan elemen hadir, kelihatan dan mempunyai dimensi yang lebih besar daripada 0.
  3. element_to_be_clickable: Menjamin elemen kelihatan, didayakan dan boleh berinteraksi, menjadikannya tersedia untuk klik yang berjaya.

Atas ialah kandungan terperinci Mengapa Selenium WebDriverWait Saya Gagal Mencari Elemen dalam Tetingkap yang Baru Dibuka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn