Fale sobre alguns tipos de espera no Selenium.
sobes.tech IA
Resposta da IA
No Selenium Webdriver, são utilizados diferentes tipos de esperas para sincronizar as ações do script com o carregamento da página web.
-
Espera implícita (Implicit Wait): Define o tempo máximo durante o qual o Selenium tentará encontrar um elemento na página antes de lançar uma exceção
NoSuchElementException. Aplica-se globalmente a todas as operações de busca de elementos após a sua configuração.from selenium import webdriver # Criar uma instância do driver driver = webdriver.Chrome() # Definir espera implícita (10 segundos) driver.implicitly_wait(10) # As operações de busca de elementos subsequentes usarão esta espera # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Fechar o driver # driver.quit() -
Espera explícita (Explicit Wait): Define o tempo máximo para cumprir uma condição específica antes de lançar uma exceção
TimeoutException. Aplica-se a um elemento ou condição concreta. Para usá-la, é necessária a classeWebDriverWaite uma das "condições esperadas" predefinidas ou personalizadas.from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Criar uma instância do driver (não é necessária espera implícita aqui, # se usar explícita para elementos específicos) driver = webdriver.Chrome() # driver.get("http://example.com") # Definir espera explícita (10 segundos) para a presença do elemento try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Ações posteriores com o elemento # element.click() except: # Lidar com exceção se o elemento não for encontrado em 10 segundos print("Elemento não encontrado em 10 segundos") # Definir espera explícita para que o elemento seja clicável try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Elemento não se tornou clicável em 15 segundos") # Fechar o driver # driver.quit() -
Espera fluida (Fluent Wait): Semelhante à espera explícita, permite definir o tempo máximo de espera e a condição. Além disso, permite especificar o intervalo de sondagem (polling interval) para verificar a condição e uma lista de exceções a ignorar durante a espera.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Criar uma instância do driver driver = webdriver.Chrome() # driver.get("http://example.com") # Definir espera fluida wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Ações posteriores com o elemento # element.click() except: print("Elemento não encontrado com a espera fluida") # Fechar o driver # driver.quit()
Comparação:
| Tipo de espera | Aplicação | Condição | Flexibilidade | Uso |
|---|---|---|---|---|
| Implicita | Global | Pesquisa de elemento | Baixa (apenas tempo) | Configuração simples para todos os elementos |
| Explícita | Específica | Condição definida | Alta (tempo, condição) | Espera por estados específicos de elementos |
| Flexível | Específica | Condição definida | Máxima (tempo, condição, intervalo, exceções a ignorar) | Cenários de espera complexos com manipulação de erros |