수색…


소개

새로운 셀렌 사용자를위한 가장 일반적인 걸림돌 중 하나는 페이지가 완전히로드 될 때까지 기다리는 것입니다. 휴먼 사용자는 페이지가 완전히로드되었는지 또는로드 중인지 쉽게 알 수 있습니다. 그러나 Selenium은 정해진 시간 동안 기다립니다. 따라서 페이지의 요소를 기다리는 좋은 방법이있는 것이 편리합니다. loop와 sleep () 함수로 이것을 수행하는 것이 가능 하지만, 이미 Selenium에 내장 된 훨씬 더 깨끗한 방법이 있습니다.

파이썬에서 명시 적 대기

브라우저가 동적 페이지 (일반적으로 AJAX 기반 웹 응용 프로그램)로 이동하면 페이지의 요소가로드되는 데 다른 시간이 걸릴 수 있으며 일부 요소는 일부 사용자 동작에 대한 응답으로 만로드됩니다. 이러한 경우 요소의 직접 검색이 실패 할 수 있습니다.

# Don't do this: may fail on dynamic page with ElementNotVisibleException
element = driver.find_element_by_name('q') 

가장 확실한 해결책은 요소를 검색하기 전에 대기를 도입하는 것입니다.

# Don't do this: inefficient solution for ElementNotVisibleException 
time.sleep(5) # delays for 5 seconds  
element = driver.find_element_by_name('q') 

그러나 이러한 솔루션은 비효율적입니다. 대부분의 경우 요소가 1 초 후에 나타나고 (때로는 최대 5 초까지 소요되는 경우도 있음) 테스트가 항상 5 초 동안 대기하기 때문입니다. 한 곳이라도별로 보이지 않지만 대개 각 테스트는 여러 요소를 처리하며 여러 테스트가 있으며 전체 테스트 기간이 합산됩니다.

더 나은 해결책은 엘리먼트가 최대 5 초 동안 나타나기를 기다리는 것이지만, 엘리먼트가 발견되는 즉시 기다림에서 되돌아 오는 것입니다. WebDriverWait 사용하면 그렇게 할 수 있습니다.

다음 예는 www.google.com으로 이동하여 검색 창이로드 될 때까지 기다린 후 최대 5 초 동안 '셀렌'을 검색합니다.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

# Create a new chromedriver instance
driver = webdriver.Chrome()

# Go to www.google.com
driver.get("https://www.google.com")

try:
    # Wait as long as required, or maximum of 5 sec for element to appear
    # If successful, retrieves the element
    element = WebDriverWait(driver,5).until(
         EC.presence_of_element_located((By.NAME, "q")))

    # Type "selenium"
    element.send_keys("selenium")
    
    #Type Enter
    element.send_keys(Keys.ENTER)

except TimeoutException:
    print("Failed to load search bar at www.google.com")
finally:
    driver.quit()

셀레늄으로 자바 기다리기

명시 적 대기 : 코드에서 계속 진행하기 전에 특정 조건이 발생할 때 까지 기다 립니다 .

WebDriver driver = new FirefoxDriver();
driver.get("http://google.com");
WebElement myElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(By.id("myElement")));

암시 적 대기 : 요소 나 요소를 즉시 사용할 수없는 경우 해당 요소를 찾으려고 할 때 일정한 시간 동안 기다 립니다 .

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://google.com");
WebElement myElement = driver.findElement(By.id("myElement"));


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow