1. Preparação para a navegação
Antes de começarmos nossas grandes aventuras, precisamos nos preparar, armados com as ferramentas certas: Selenium e um pouquinho de astúcia. Vamos assumir que você já sabe como configurar o Selenium e o driver do navegador, então bora lá!
Configuração do driver
from selenium import webdriver
# Inicializamos o driver do navegador, por exemplo, Chrome
driver = webdriver.Chrome()
# Abrimos a primeira página da nossa aventura
driver.get("http://example.com/start-page")
Por enquanto está tudo padrão — abrimos o navegador e carregamos a página inicial. Mas é aqui que a diversão começa: não queremos apenas ficar presos em uma página. Queremos visitar todas as suas vizinhas!
2. Paginação: passeando pelas páginas
A maneira mais simples e amigável de navegar entre páginas é através da paginação. Vocês todos já viram esses pequenos números fofos no final da página, certo? Eles são como placas na estrada: "Sua próxima parada é a página 2".
Extraindo dados das páginas
Antes de começarmos nossa jornada, queremos coletar informações da página atual. Suponha que sejam listas de produtos ou títulos de artigos.
def extract_data():
# Encontramos todos os elementos que nos interessam na página, como os títulos
titles = driver.find_elements_by_class_name("item-title")
for title in titles:
print(title.text) # Sim, estamos apenas exibindo o texto, mas você pode salvá-lo em qualquer lugar
extract_data()
Se você perdeu as palestras anteriores, esse pedacinho de código
procura por todos os títulos com a classe item-title
e
os exibe.
Navegando para a próxima página
Agora que estamos armados com dados, é hora de seguir em frente. A paginação geralmente é representada por botões com links para a próxima ou anterior página. Precisamos encontrar esses botões e clicar neles.
def go_to_next_page():
try:
# Encontramos o botão da próxima página e clicamos nele
next_button = driver.find_element_by_link_text("Next")
next_button.click()
except NoSuchElementException:
# Se o botão não existir, significa que chegamos ao fim
print("Fim da lista de páginas.")
Essa função procura por um link com o texto «Next»
. Se encontrado,
ele clica, indo para a próxima página. Se não, nosso bot entende que chegou ao fim da internet...
ou pelo menos dessa sequência de páginas.
3. Loop de navegação por páginas
O que falta para a felicidade completa? Isso mesmo, um loop! Vamos juntar tudo isso em um único loop conveniente, para que nosso bot possa visitar todas as páginas disponíveis como um verdadeiro profissional.
while True:
extract_data() # Coletamos dados da página atual
go_to_next_page() # Vamos para a próxima
time.sleep(2) # Descansamos um pouco para não assustar o servidor
Pronto, agora nosso bot bravamente percorre todas as páginas, onde
pode clicar no botão «Next»
. Esse código continuará sendo executado
até que todas as páginas acabem.
Lembre-se, uma pausa entre requisições é sua amizade com o servidor.
Ninguém gosta de spammers, especialmente os administradores de sites.
4. Interação dinâmica
Amigos, nem tudo é tão simples na vida como nesses exemplos de paginação. Às vezes, a página se comporta como um ninja esquivo, carregando dados dinamicamente enquanto você desce. Não se preocupe, lidaremos com isso também.
Espera explícita
Esperar faz o seu código "meditar" até que o elemento necessário esteja disponível. Isso é especialmente útil quando o conteúdo não carrega imediatamente.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def wait_for_element(locator):
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, locator))
)
return element
except TimeoutException:
print("Elemento não encontrado.")
Com essa função seu bot ficará em harmonia com o conteúdo carregado dinamicamente, esperando até que os elementos estejam disponíveis.
Rolagem da página
Com conteúdo dinâmico, presente em páginas mágicas como rolagem infinita, pode ser necessário rolar a página para baixo para carregar mais elementos.
def scroll_down():
# Usamos JavaScript para rolar para baixo
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
O script em JavaScript ajuda a fazer uma rolagem suave para baixo, permitindo que a página carregue o conteúdo. Esse truque pode ser usado dentro de um loop para lidar com a rolagem infinita.
5. Dicas e truques
Sair dos exemplos básicos é como abrir um livro de aventuras, cheio de surpresas. Imagine que seu bot, assim como você, deve estar pronto para diferentes cenários.
Se o botão «Next»
não existir, mas houver uma paginação com números
de páginas, utilize uma abordagem dinâmica substituindo o número diretamente
na URL. E se o site decidir de repente agir como um ninja e
esconder algumas páginas, ajuste seus scripts para que eles possam
se adaptar, sempre prontos para o inesperado.
GO TO FULL VERSION