2014-12-24 3 views
2

내가 웹에서 본 적이 가장 일반적인 대기 작업이 나는 REPL에서 오전, 내가 driver.get은 블록 조작이라고 볼 수있다 아무것도 할 수 없다, 그러나이셀레늄 : 이해 대기

driver.get(url) 
# apply a wait now 

입니다 완료 될 때까지 완료됩니다.

>>> driver.get(url) 
# this blocks everything else until loading is complete 

대기 시간은 어떻게됩니까? 어떤 것이 든, driver.get 전에 신고되기를 기다리지 말아야합니까?

답변

4

저는 블로킹 작업이고 명령 대기가 Selenium에서 구현 된 URL에 액세스하는 데 필요한 시간에 혼란스러워하고 있다고 생각합니다.

http://selenium-python.readthedocs.org/en/latest/waits.html

셀레늄 Webdriver은 대기의 두 가지 유형을 제공하는 설명서를 참조하십시오 - 명시 적 & 암시. 명시 적 대기는 WebDriver가 실행을 계속하기 전에 특정 조건이 발생하기를 기다리게합니다. 암시 적 대기는 WebDriver가 요소를 찾으려고 할 때 일정 시간 동안 DOM을 폴링하도록합니다. 문서에서

코드 :

명시 적으로 대기 셀레늄의는 특정 조건이 코드에서 더 진행하기 전에 발생할 때까지 기다릴 정의 코드입니다.

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 
from selenium.webdriver.support import expected_conditions as EC# available since 2.26.0 

ff = webdriver.Firefox() 
ff.get("http://somedomain/url_that_delays_loading") 
try: 
    element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement"))) 
finally: 
    ff.quit() 

암시 대기은 즉시 사용할 수없는 경우 요소 또는 요소를 발견 할 때 일정한 시간 동안 DOM을 폴링 WebDriver를 알려주는 것이다.

from selenium import webdriver 
ff = webdriver.Firefox() 
ff.implicitly_wait(10) # seconds 
ff.get("http://somedomain/url_that_delays_loading") 
myDynamicElement = ff.find_element_by_id("myDynamicElement") 
-1

대개 사이트가로드 될 때까지 기다리지 않고 모든 js 코드를 실행하도록 기다렸습니다. 스크립트의 크기와 복잡성에 따라 수 초가 걸릴 수 있습니다.