2014-12-22 12 views
9

Sadece merak ediyorum, bir bağlantıya tıklamadan önce tarayıcının nasıl beklemesi gerekiyor? Amacım, dinamik bir web sayfasından alıntı yapıyorum, içerik dinamik ama form kimliğini almayı başardım. Tek sorun, gönderme düğmesinin sadece 2-3 saniye sonra gösterilmesidir. Ancak, Firefox sürücüm, sayfa yüklendiğinde (dinamik parça değil) bağlantıya hemen tıklamaya başlar.Python Selenium linke tıklamadan önce nasıl beklemeniz gerekir

Tarayıcımın, gönder düğmesi görünene kadar 2-3 saniye beklemesinin bir yolu var mı? time.sleep() kullanmayı denedim ancak her şeyi duraklatıyor, gönderme düğmesi time.sleep sırasında görünmüyor ancak time.sleep bittiğinde 2-3 saniye sonra görünür.

cevap

13

Aşağıdaki gibi bekleyin ayarlayabilirsiniz:

Açık beklemeye:

element = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.ID, "myElement")) 

Örtülü bekleme:

driver.implicitly_wait(20) # seconds 
driver.get("Your-URL") 
myElement = driver.find_element_by_id("myElement") 

Yukarıdaki herhangi birini kullanabilirsiniz. Her ikisi de geçerlidir.

+1

mükemmel, ne ihtiyacım var, teşekkürler. Sadece açıklığa kavuşturmak için, açık beklemede bu öğe için uygulanacak, ancak örtük bekleyiş tüm oturum için geçerli olacak, ben doğru muyum? – Kiddo

+0

Evet haklısınız, Yine de ana farklılığı istiyorsanız. aralarında lütfen bakın: http://stackoverflow.com/questions/22656615/what-is-difference-between-implicit-wait-vs-explicit-wait-in-selenium-webdriver –

+1

@HelpingHands: Yukarıdaki her ikisi de bekler kullandınız [** 'Explicitwaits' **] (http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits), değil [**' Implicit waits' **] (http: //docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#implicit-waits). Lütfen kodunuzu uygun şekilde kontrol edip düzenleyin. – Subh

1

Selenium Waits'u kullanmanız gerekir.

Özellikle, element_to_be_clickable beklenen koşul diğerlerinden daha iyi uyuyor şudur:

driver sizin webdriver örneğidir
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "myDynamicElement")) 
) 
element.click() 

, 10 bir element için beklenecek saniye miktarıdır. Bu kurulumla, selenyum, toplamda 10 saniyeliğine her 500 milisaniyede bir eleman bulmaya çalışır. Eger eleman bulunmazsa, 10 saniye sonra TimeoutException atar.

+4

Ben güne yeni bir şey öğrendim, element_to_be_clickable, teşekkürler – Kiddo

İlgili konular