CodeGym /Curso Java /Python SELF PT /Criando funções para buscar e interagir com elementos em ...

Criando funções para buscar e interagir com elementos em uma página web

Python SELF PT
Nível 37 , Lição 2
Disponível

1. Fundamentos de busca de elementos na página

Usando métodos de busca de elementos

Quando você começar a usar Selenium em projetos reais, uma das primeiras tarefas será buscar elementos na página. Isso pode ser comparado a procurar o botão do elevador em um hotel: você precisa saber onde ele está localizado para apertar e ir para o andar desejado.

O Selenium oferece vários métodos para buscar elementos. Dependendo das suas preferências, você pode usar find_element_by_id, find_element_by_name, find_element_by_xpath, find_element_by_css_selector, e assim por diante. Vamos relembrar o que já sabemos - e escrever um exemplo simples:

Python

from selenium import webdriver

# Criando uma instância do navegador (aqui usamos Chrome)
driver = webdriver.Chrome()

# Abrindo a página
driver.get('http://example.com')

# Buscando elemento pelo ID
element_by_id = driver.find_element_by_id('main')

# Buscando elemento pelo nome
element_by_name = driver.find_element_by_name('username')

# Buscando elemento pelo XPath
element_by_xpath = driver.find_element_by_xpath('//div[@class="content"]')

# Buscando elemento pelo CSS Selector
element_by_css = driver.find_element_by_css_selector('div.content')

Diferenças entre find_element e find_elements

Quando você tem vários elementos que deseja capturar (tipo, todos os botões com a classe btn), você vai precisar do método find_elements. A diferença entre find_element e find_elements é que o primeiro retorna um único elemento, enquanto o segundo retorna uma lista de elementos.

Python

# Buscando um único elemento
single_element = driver.find_element_by_class_name('btn')

# Buscando vários elementos
multiple_elements = driver.find_elements_by_class_name('btn')

# Iterando sobre os elementos encontrados
for element in multiple_elements:
    print(element.text)

Como você pode ver, find_elements é perfeito para trabalhar com coleções de elementos, que podem ser muitos na página. Cada método find_element_xxx tem o seu find_elements_xxx, que retorna uma lista de elementos.

2. Interação interativa com os elementos

Interagindo com botões, links e campos de entrada

Agora que você relembrou como encontrar os elementos, é hora de lembrar como interagir com eles! É tipo brincar com LEGO: você precisa encaixar as peças certas para montar o que quer.

A interação com elementos pode ser feita usando os métodos que o Selenium oferece. Vamos dar outra olhada em como isso funciona:

Python

# Clicando em um botão
button = driver.find_element_by_id('submit')
button.click()

# Inserindo texto em um campo de entrada
input_field = driver.find_element_by_name('q')
input_field.send_keys('Python selenium tutorial')

# Obtendo o texto de um elemento
header = driver.find_element_by_tag_name('h1')
print(header.text)

Trabalhando com eventos e elementos dinâmicos

Quando o assunto é trabalhar com elementos dinâmicos, tipo botões que só aparecem depois de uma certa ação, é importante considerar atrasos e esperas. O Selenium oferece maneiras de esperar por esses elementos. Uma delas é usar a classe WebDriverWait junto com expected_conditions.

Python

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

# Esperando pelo botão por até 10 segundos
button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'submit'))
)

button.click()

Nota. Para não precisar escrever expected_conditions toda hora, renomeamos ele na hora de importar para EC.

Usar esperas torna o seu script mais robusto e evita que quebre por causa de atrasos temporários ou carregamento lento da página. E na prática, isso acontece bastante - quase sempre :)

3. O que pode dar errado?

Tudo. Tudo pode dar errado. Você está todo empolgado para interagir com os elementos, mas aí, pá, algo dá errado. Vamos discutir alguns erros típicos que podem surgir nesse caminho.

Primeiro, NoSuchElementException — essa mensagem de erro você vai ver bastante, especialmente se o elemento que você procura não existe na página. Ela acontece quando você tenta buscar um elemento que não está lá. Para evitar essas situações, você pode usar o método try-except para tratar exceções.

Python

from selenium.common.exceptions import NoSuchElementException

try:
    element = driver.find_element_by_id('non_existent_id')
except NoSuchElementException:
    print("Ops, parece que o elemento não foi encontrado!")

Também podem ocorrer problemas com elementos dinâmicos e tempo de carregamento. Nesse caso, espere pelo carregamento dos elementos usando WebDriverWait, como discutimos anteriormente.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION