CodeGym /Curso Java /Python SELF PT /Visitando várias páginas com o mínimo de uso de elementos...

Visitando várias páginas com o mínimo de uso de elementos dinâmicos

Python SELF PT
Nível 38 , Lição 1
Disponível

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

Python

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.

Python

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.

Python

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.

Python

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.

Python

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.

Python

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.

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