1. Usando o botão "Próximo"
Se o site tiver um botão ou link "Próximo" para ir para a próxima página, é possível configurar um loop para clicar nesse botão enquanto ele estiver disponível.
Exemplo de código
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
# Exemplo de coleta de dados na página atual
items = driver.find_elements(By.CLASS_NAME, "item_class")
for item in items:
print(item.text) # Aqui você pode salvar ou processar os dados
def click_next_button(driver):
try:
next_button = driver.find_element(By.LINK_TEXT, "Próximo")
next_button.click()
return True
except NoSuchElementException:
return False # Botão não encontrado, isso significa que estamos na última página
def main():
driver = initialize_driver()
open_page(driver, "https://example.com/page1")
try:
while True:
collect_data(driver)
if not click_next_button(driver):
break # Sai do loop se o botão "Próximo" não estiver presente
time.sleep(2) # Atraso para carregar a próxima página
finally:
driver.quit()
main()
Explicação do código
initialize_driver() — inicialização do driver.
open_page() — abre a primeira página para começar.
collect_data() — função para coletar dados na página atual.
click_next_button() — função que encontra e clica no botão «Próximo». Se o botão não estiver presente, retorna False, indicando o fim da navegação.
Loop no main() — o loop principal para navegação entre as páginas. Ele termina quando o botão «Próximo» não é mais encontrado.
2. Paginação usando números das páginas
Em alguns sites, há links numerados para páginas (por exemplo, «1», «2», «3» e assim por diante). Nesses casos, é possível coletar uma lista de links e navegar por cada um deles em sequência.
Exemplo de código
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
items = driver.find_elements(By.CLASS_NAME, "item_class")
for item in items:
print(item.text)
def go_to_page(driver, page_number):
page_link = driver.find_element(By.LINK_TEXT, str(page_number))
page_link.click()
def main():
driver = initialize_driver()
open_page(driver, "https://example.com/page1")
try:
total_pages = 5 # Especifique o número total de páginas, se conhecido
for page in range(1, total_pages + 1):
collect_data(driver)
if page < total_pages: # Não vá para a próxima página após a última
go_to_page(driver, page + 1)
time.sleep(2) # Atraso para carregar a próxima página
finally:
driver.quit()
main()
Explicação do código
go_to_page() — função que localiza o link para a página desejada pelo número e vai para ela.
Loop no main() — usa a variável total_pages para determinar o número de páginas. O loop navega para as próximas páginas até atingir a última.
3. Alterando a URL para cada página
Alguns sites têm uma estrutura de URL simples, onde cada página é identificada por um número no URL, por exemplo, https://example.com/page/1, https://example.com/page/2, e assim por diante. Nesse caso, é possível apenas alterar o URL e carregar a página desejada, evitando a necessidade de encontrar elementos.
Exemplo de código
from selenium import webdriver
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
items = driver.find_elements_by_class_name("item_class")
for item in items:
print(item.text)
def main():
driver = initialize_driver()
try:
total_pages = 5 # Especifique o número total de páginas, se conhecido
base_url = "https://example.com/page/"
for page_number in range(1, total_pages + 1):
url = f"{base_url}{page_number}"
open_page(driver, url)
collect_data(driver)
time.sleep(2) # Atraso para carregar a próxima página
finally:
driver.quit()
main()
Explicação do código
A variável base_url contém o URL base da página. O loop complementa ele com o número da página e abre cada página em sequência.
O loop gera o URL de cada página e faz a coleta de dados sem clicar em elementos. Isso minimiza a probabilidade de erros.
4. Dicas de otimização
- Minimize esperas e cliques em elementos dinâmicos: Usar links e URLs é mais confiável do que clicar em botões carregados via JavaScript.
- Use temporizadores de espera com atrasos mínimos: Ao navegar para uma nova página, use um pequeno atraso
time.sleep(2), para que os elementos tenham tempo de carregar, mas evite atrasos desnecessários. - Colete dados após o carregamento completo da página: Certifique-se de que todos os dados da página estejam totalmente carregados antes de começar a coletá-los. Use
implicitly_waitpara detectar elementos de forma confiável. - Logging: Implemente logging para registrar a página atual, erros e transições bem-sucedidas. Isso facilitará o diagnóstico do script durante sua execução.
GO TO FULL VERSION