CodeGym /Cursos /Python SELF PT /Otimização do script para trabalho estável e minimização ...

Otimização do script para trabalho estável e minimização de erros

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

1. Análise de desempenho

Por que a otimização é importante?

Imagine um carro potente que pode acelerar até 100 km/h em três segundos, mas consome combustível como uma baleia - plâncton. O mesmo acontece com seu script: ele pode ser muito rápido, mas extremamente "guloso" em termos de recursos e tempo de execução. Além disso, "vazamentos" de recursos podem torná-lo instável, o que, por sua vez, pode levar a erros. A otimização ajuda a evitar esses problemas.

Primeiro de tudo, como dizem os cirurgiões, fazemos uma "incisão". Vamos realizar uma análise de desempenho do nosso script para entender onde ele pode estar "sofrendo".

Métodos para verificar a velocidade e estabilidade do script

Um dos métodos simples de análise é usar ferramentas básicas do Python, como o módulo time. Vamos adicionar algumas linhas no nosso script para entender quais operações estão consumindo mais tempo.

Python

import time

start_time = time.time()
# Aqui está seu código para executar ações com Selenium
end_time = time.time()

print(f"Tempo de execução: {end_time - start_time} segundos")
  

Esse pequeno trecho de código te ajudará a determinar quanto tempo leva para executar partes do código. Com esses "cronômetros", é possível localizar os gargalos.

Identificação de pontos fracos e sua otimização

Assim que encontrar a parte do código que está "consumindo" mais tempo, tome uma atitude. Talvez você esteja acessando elementos dinâmicos com mais frequência do que o necessário, ou seu código virou uma espécie de "spaghetti". O primeiro passo é identificar; o segundo, agir.

Redução do número de requisições: Verifique se você não está navegando entre páginas ou atualizando o DOM com muita frequência. Por exemplo, usar o método WebDriverWait ajuda a executar o script apenas após o carregamento completo dos elementos desejados.

Python

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

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'meuElementoDinamico'))
)
  

Cache de dados: Se você está lidando com os mesmos dados repetidamente, considere usar cache. Armazene dados em variáveis ou em cache para minimizar operações que consomem muitos recursos.

2. Melhorando a estrutura do script

Se seu código é tão legível quanto um mapa do metrô sem marcadores e nomes das estações, está na hora de melhorá-lo. Uma estrutura de código otimizada é essencial para uma compreensão fácil e maior resistência a erros.

Usando pipelines de dados e soluções algorítmicas otimizadas

Pense em estruturar seu código como um pipeline, onde cada função ou módulo é responsável por sua parte lógica. Dividir o código em blocos lógicos não só melhora a legibilidade como também facilita o debug.

Python

def carregar_pagina(url):
    driver.get(url)

def extrair_dados():
    # Código para extrair dados
    pass

def salvar_dados():
    # Código para salvar dados
    pass

carregar_pagina("http://example.com")
extrair_dados()
salvar_dados()
  

Melhorando a legibilidade e testabilidade do código

Siga o princípio "uma função — uma tarefa". Isso facilitará os testes e refatoração. Use constantes nomeadas em vez de "números mágicos" e strings para maior clareza.

Python

MAX_TENTATIVAS = 5

def buscar_dados_com_tentativa():
    for tentativa in range(MAX_TENTATIVAS):
        try:
            # Tentativa de solicitação de dados
            pass
        except Exception as e:
            print(f"Tentativa {tentativa+1} falhou: {e}")
  

3. Se o código pode ser melhorado, ele deve ser melhorado

Use esperas explícitas em vez de implícitas

Esperas explícitas permitem controlar com precisão quando o Selenium deve começar a realizar ações, aguardando a presença dos elementos necessários. Em vez de confiar em esperas implícitas (como implicitly_wait), use a biblioteca WebDriverWait, que permite configurar condições específicas para os elementos (por exemplo, o elemento está visível, clicável, etc.).

Exemplo de uso de espera explícita

Python

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

element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "elemento_alvo"))
)
  

Certifique-se de que a página está pronta

Após o carregamento de uma página, nem sempre todos os elementos estão imediatamente acessíveis, especialmente se o site usar métodos de carregamento assíncrono (AJAX). Use document.readyState para verificar o carregamento completo antes de começar a interagir.

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