Selenyum ile Bir Sayfanın Yüklenmesi Nasıl Beklenir?

How Wait Page Load With Selenium



Selenium web sürücüsü ile web otomasyonu veya web kazıma yaparken, seçmek istediğiniz elemanın mevcut olmaması veya basmak istediğiniz butonun tıklanmaya hazır olmaması gibi sorunlarla karşılaşabilirsiniz.

Bunun olmasının nedeni, Selenium web sürücüsünün web sayfasını indirmesi ve üzerinde herhangi bir şey yapmadan önce sayfayı oluşturmayı bitirmesidir. Geçmişte, web sunucusu bir web sitesinin içeriğini oluşturuyordu ve tarayıcı bunu indirdi ve oluşturdu. Bu günlerde, biraz farklı çalışan birçok tek sayfalı web uygulamamız var. Tek Sayfa Web Uygulamalarında (SPA), web sunucusu yalnızca ön uç kodlarını sunar. Ön uç kodu tarayıcıda oluşturulduktan sonra, ön uç kodu web sunucusuna API verilerini istemek için AJAX kullanır. Ön uç API verilerini aldığında, bunları tarayıcıda işler. Bu nedenle, tarayıcı web sayfasını indirmeyi ve oluşturmayı bitirmiş olsa bile, web sayfası hala hazır değildir. API verilerini almasını ve işlemesini de beklemeniz gerekir. Dolayısıyla, bu sorunun çözümü, Selenium ile herhangi bir şey yapmadan önce verilerin kullanılabilir olmasını beklemektir.







Selenium'da 2 tür bekleme vardır:
1) Örtük bekleme
2) Açık bekleme



1) Örtük bekleme: Bu, uygulanması en kolay olanıdır. Örtülü bir bekleme, Selenium web sürücüsüne DOM'nin (belge nesne modeli) hazır olması (web sayfasının hazır olması) için birkaç saniye beklemesini söyler.



2) Açık bekleme: Bu, örtük beklemeden biraz daha karmaşık. Açıkça beklemede, Selenium web sürücüsüne neyi bekleyeceğini söylersiniz. Selenyum, bu özel koşulun yerine getirilmesini bekler. Tamamlandığında, Selenium web sürücüsü diğer komutları almaya hazır olacaktır. Genellikle, açık bekleme süresi değişkendir. Koşulların ne kadar çabuk yerine getirildiğine bağlıdır. En kötü senaryoda, açık bekleme, örtülü bekleme kadar bekleyecektir.





Bu yazıda, Selenium ile bir sayfanın yüklenmesi için nasıl bekleneceğini (örtük ve açık) göstereceğim. Öyleyse başlayalım.

Önkoşullar:

Bu makaledeki komutları ve örnekleri denemek için, sahip olmalısınız,



1) Bilgisayarınızda kurulu bir Linux dağıtımı (tercihen Ubuntu).
2) Bilgisayarınızda yüklü olan Python 3.
3) Bilgisayarınızda yüklü PIP 3.
4) Piton sanal ortam Bilgisayarınızda yüklü olan paket.
5) Bilgisayarınızda yüklü Mozilla Firefox veya Google Chrome web tarayıcıları.
6) Firefox Gecko Sürücüsünün veya Chrome Web Sürücüsünün nasıl kurulacağını bilmeli.

4, 5 ve 6 numaralı gereksinimleri yerine getirmek için makalemi okuyun Python 3 ile Selenium'a Giriş Linuxhint.com'da .

Diğer konularda birçok makale bulabilirsiniz. LinuxHint.com . Herhangi bir yardıma ihtiyacınız olursa onları kontrol ettiğinizden emin olun.

Bir Proje Dizini Ayarlama:

Her şeyi düzenli tutmak için yeni bir proje dizini oluşturun selenyum-bekle/ aşağıdaki gibi:

$mkdir -pvselenyum-bekle/sürücüler

Şuraya gidin: selenyum-bekle/ proje dizini aşağıdaki gibidir:

$CDselenyum-bekle/

Proje dizininde aşağıdaki gibi bir Python sanal ortamı oluşturun:

$sanalenv .venv

Sanal ortamı aşağıdaki gibi etkinleştirin:

$kaynak.venv/NS/etkinleştirmek

Selenium'u PIP3 kullanarak aşağıdaki gibi kurun:

$ pip3 selenyum yükleyin

Gerekli tüm web sürücüsünü indirin ve yükleyin. sürücüler/ proje dizini. Web sürücüleri indirme ve yükleme işlemini makalemde anlattım. Python 3 ile Selenium'a Giriş . Herhangi bir yardıma ihtiyacınız olursa, arama yapın LinuxHint.com o makale için.

Bu makaledeki gösterim için Google Chrome web tarayıcısını kullanacağım. Yani, kullanacağım krom sürücü gelen ikili sürücüler/ dizin.

Örtük beklemeyi denemek için yeni bir Python betiği oluşturun ex01.py proje dizininizde ve bu dosyaya aşağıdaki kod satırlarını yazın.

itibarenselenyumiçe aktarmakweb sürücüsü
itibarenselenyum.web sürücüsü.yaygın.anahtarlar içe aktarmakAnahtarlar
seçenekler=web sürücüsü.ChromeSeçenekleri()
seçenekler.başsız = NS
tarayıcı=web sürücüsü.Krom(yürütülebilir_yol='./drivers/chromedriver',seçenekler=seçenekler)
tarayıcı.örtük_bekle(10)
tarayıcı.elde etmek('https://www.unixtimestamp.com/')
zaman damgası=tarayıcı.find_element_by_xpath('//h3[@][1]')
Yazdır('Geçerli zaman damgası: %s'%(zaman damgası.Metin.bölmek('')[0]))
tarayıcı.kapat()

İşiniz bittiğinde, kaydedin ex01.py Python komut dosyası.

Satır 1 ve 2, gerekli tüm Selenium bileşenlerini içe aktarır.

4. satır, bir Chrome Seçenekleri nesnesi oluşturur.

5. satır, Chrome web sürücüsü için başsız modu etkinleştirir.

7. satır, aşağıdakileri kullanarak bir Chrome tarayıcı nesnesi oluşturur: krom sürücü gelen ikili sürücüler/ dizin.

Satır 8, Selenium'a aşağıdakileri kullanarak örtük olarak 10 saniye beklemesini söylemek için kullanılır. örtük_bekle() tarayıcı yöntemi.

Satır 10, www.unixtimestamp.com'u tarayıcıya yükler.

Satır 12, XPath seçiciyi kullanarak zaman damgası öğesini bulur //h3[@class='metin-tehlike'][1] ve içinde saklar zaman damgası değişken.

XPath seçiciyi Chrome Geliştirici Aracından aldım. Gördüğünüz gibi, zaman damgası ilk h3 sınıf adına sahip eleman metin tehlikesi . Onlar 2kişi h3 sınıf ile elementler metin tehlikesi .

Satır 13, yalnızca XPath seçiciyi kullanarak seçtiğim ve zaman damgası değişken.

14. satır tarayıcıyı kapatır.

İşiniz bittiğinde Python betiğini çalıştırın ex01.py aşağıdaki gibi:

$ python3 ex01.p

Gördüğünüz gibi, geçerli zaman damgası unixtimestamp.com'dan çıkarılır ve konsola yazdırılır.

Açık Bekleme ile Çalışmak:

Açık beklemeyi denemek için yeni bir Python betiği oluşturun ex02.py proje dizininizde ve bu dosyaya aşağıdaki kod satırlarını yazın.

itibarenselenyumiçe aktarmakweb sürücüsü
itibarenselenyum.web sürücüsü.yaygın.anahtarlar içe aktarmakAnahtarlar
itibarenselenyum.web sürücüsü.yaygın.tarafından içe aktarmakTarafından
itibarenselenyum.web sürücüsü.destek.soğan içe aktarmakWebSürücüsüBekle
itibarenselenyum.web sürücüsü.destek içe aktarmakbeklenen_koşullar
seçenekler=web sürücüsü.ChromeSeçenekleri()
seçenekler.başsız = NS
tarayıcı=web sürücüsü.Krom(yürütülebilir_yol='./drivers/chromedriver',seçenekler=seçenekler)
tarayıcı.elde etmek('https://www.unixtimestamp.com/')
denemek:
zaman damgası=WebSürücüsüBekle(tarayıcı, 10).a kadar(
beklenen_koşullar.varlığı_of_element_located((Tarafından.XPATH, '
//h3[@][1]'
))
)
Yazdır('Geçerli zaman damgası: %s'%(zaman damgası.Metin.bölmek('')[0]))
nihayet:
tarayıcı.kapat()

İşiniz bittiğinde, kaydedin ex02.py Python komut dosyası.

Satır 1-5, gerekli tüm bileşenleri Selenium kitaplığından içe aktarır.

7. satır, bir Chrome Seçenekleri nesnesi oluşturur.

Satır 8, Chrome web sürücüsü için başsız modu etkinleştirir.

Satır 10, aşağıdakileri kullanarak bir Chrome tarayıcı nesnesi oluşturur: krom sürücü gelen ikili sürücüler/ dizin.

12. satır www.unixtimestamp.com'u tarayıcıya yükler.

Açık bekleme, try-finally bloğunda uygulanır (14-20 satırından itibaren)

Satır 15-17 kullanır WebSürücüsüBekle() nesne. ilk argümanı WebSürücüsüBekle() tarayıcı nesnesidir ve ikinci argüman, koşulun yerine getirilmesi için izin verilen maksimum süredir (en kötü durum senaryosu), bu durumda 10 saniyedir.

İçinde a kadar() engellemek, beklenen_koşullar.presence_of_element_located() Yöntem, öğeyi seçmeye çalışmadan önce öğenin mevcut olduğundan emin olmak için kullanılır. Buraya, By.XPATH anlatmak için kullanılır mevcudiyet_of_element_located() Öğeyi seçmek için bir XPath seçicisini kullandığımız yöntem. XPath seçicisi //h3[@class='metin-tehlike'][1] .

Öğe bulunduğunda, içinde saklanır. zaman damgası değişken.

Satır 18, yalnızca seçilen öğeden zaman damgasını yazdırır.

Son olarak, 19-20 satırı tarayıcıyı kapatır.

İşiniz bittiğinde, çalıştırın ex02.py Python betiği aşağıdaki gibidir:

$ python3 ex02.p

Gördüğünüz gibi, unixtimestamp.com'dan gelen geçerli zaman damgası konsolda yazdırılıyor.

Açık Beklemelerde Öğeleri Seçme:

Önceki bölümde kullandığım By.XPATH XPath seçiciyi kullanarak öğeyi seçmek için. Öğeleri ID, etiket adı, CSS sınıf adı, CSS seçici vb. kullanarak da seçebilirsiniz.

Desteklenen seçim yöntemleri aşağıda verilmiştir:

By.XPATH – XPath seçiciyi kullanarak elemanı/elemanları seçer.

göre.CLASS_NAME – CSS sınıf adını kullanarak elemanı/elemanları seçer.

By.CSS_SELECTOR – CSS seçiciyi kullanarak elemanı/elemanları seçer.

Kimliğe Göre – Kimliğe göre öğeyi seçer

İsimle – Elemanı/elemanları ada göre seçer.

Tarafından.TAG_NAME – Öğeyi/elemanları HTML etiket adına göre seçer.

By.LINK_TEXT – Öğeyi/elemanları bağlantı metnine göre seçer ile (çapa) HTML etiketi.

Tarafından.PARTIAL_LINK_TEXT – Kısmi bağlantı metnine göre öğeyi/elemanları seçer ile (çapa) HTML etiketi.

Bunlar hakkında daha fazla bilgi için şu adresi ziyaret edin: Python Selenyum API Dokümantasyon Sayfası .

Açık Beklemelerde Beklenen Koşullar:

Daha önceki açık bekleme örneğinde, mevcudiyet_of_element_located() yöntemi beklenen_koşullar aradığım öğenin seçmeden önce var olduğundan emin olmak için açık bekleme koşulu olarak.

başka var beklenen_koşullar açık bir bekleme koşulu olarak kullanabilirsiniz. Onlardan bazıları:

başlık_is(başlık) – sayfanın başlığının olup olmadığını kontrol eder Başlık .

title_contains(partial_title) – sayfa başlığının başlığın bir bölümünü içerip içermediğini kontrol eder kısmi_başlık .

görünürlük_of(eleman) – olup olmadığını kontrol eder eleman öğenin genişliği ve yüksekliği 0'dan büyük olan sayfada görünür.

görünürlük_of_element_located(yer belirleyici) -

mevcudiyet_of_element_located(yer bulucu) – Elemanın bulunduğundan emin olun ( konum belirleyici ) sayfasında bulunmaktadır. NS konum belirleyici bir demet (Seçici tarafından), açık bekleme örneğinde gösterdiğim gibi.

mevcudiyet_of_all_element_located() – Tüm öğenin eşleştiğinden emin olur. konum belirleyici sayfada bulunmaktadır. NS konum belirleyici bir (Tarafından, seçici) demet.

text_to_be_present_in_element(bulucu, metin) – olup olmadığını kontrol eder. Metin tarafından bulunan elemanda bulunur. konum belirleyici . NS konum belirleyici bir (Tarafından, seçici) demet.

element_to_be_clickable(bulucu) – Elemanın yanında yer alıp almadığını kontrol eder. konum belirleyici görünür ve tıklanabilir. NS konum belirleyici bir (Tarafından, seçici) demet.

element_to_be_selected(yer belirleyici) – Elemanın yanında yer alıp almadığını kontrol eder. konum belirleyici seçildi. NS konum belirleyici bir (Tarafından, seçici) demet.

alert_is_present() – sayfada bir uyarı iletişim kutusu olmasını bekleyin.

Daha çok var beklenen_koşullar kullanımınıza sunulmuştur. Bunlar hakkında daha fazla bilgi için şu adresi ziyaret edin: Python Selenyum API Dokümantasyon Sayfası .

Çözüm:

Bu yazıda Selenium'un örtük ve açık beklemelerini tartıştım. Ayrıca size örtük ve açık bir bekleyişle nasıl çalışılacağını da gösterdim. Selenium, bekleme süresini mümkün olduğunca azaltmaya çalışacağından, Selenium projelerinizde her zaman açık beklemeyi kullanmaya çalışmalısınız. Bu şekilde, Selenium projelerinizi her çalıştırdığınızda belirli sayıda saniye beklemek zorunda kalmazsınız. Açık bekleme, çok fazla saniye kazandırmalıdır.

Selenyum beklemeleri hakkında daha fazla bilgi için, adresini ziyaret edin. resmi Selenium Python Kütüphanesi Dokümantasyon sayfasını bekler .