CodeGym /Kursy /Python SELF PL /Optymalizacja skryptu dla stabilnej pracy i minimalizacji...

Optymalizacja skryptu dla stabilnej pracy i minimalizacji błędów

Python SELF PL
Poziom 38 , Lekcja 3
Dostępny

1. Analiza wydajności

Dlaczego optymalizacja jest potrzebna?

Wyobraź sobie szybkie auto, które może przyspieszyć do 100 km/h w trzy sekundy, ale zużywa paliwo jak wieloryb plankton. Twój skrypt może być bardzo szybki, ale "żarłoczny", jeśli chodzi o zasoby i czas wykonania. Co więcej, "wycieki" zasobów mogą sprawić, że będzie niestabilny, co może prowadzić do błędów. Optymalizacja pomaga uniknąć takich problemów.

Najpierw, jak mówią chirurdzy, robimy "cięcie". Przeprowadzimy analizę wydajności naszego skryptu, aby zobaczyć, gdzie może "cierpieć".

Metody sprawdzania prędkości i stabilności wykonywania skryptu

Jednym z prostych sposobów analizy jest użycie podstawowych narzędzi Python, takich jak moduł time. Dodajmy kilka linijek do naszego skryptu, aby zobaczyć, które operacje zajmują najwięcej czasu.

Python

import time

start_time = time.time()
# Tutaj twój kod do wykonania akcji z Selenium
end_time = time.time()

print(f"Czas wykonania: {end_time - start_time} sekund")
  

Ten mały fragment kodu pomoże ci określić, ile czasu zajmuje wykonanie części kodu. Dzięki takim "stoperom" można zlokalizować "wąskie gardła".

Identyfikacja słabych punktów i ich optymalizacja

Gdy znajdziesz część kodu, która "pożera" czas, możesz podjąć działania. Może być tak, że odwołujesz się do dynamicznych elementów częściej niż to konieczne, albo twój kod przypomina "spaghetti". Pierwszy krok — identyfikacja, drugi — działanie.

Zmniejszanie liczby zapytań: Sprawdź, czy nie wykonujesz zbyt wielu przejść między stronami lub aktualizacji DOM. Na przykład używanie metody WebDriverWait pomaga uruchomić skrypt dopiero po pełnym załadowaniu pożądanych elementów.

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, 'myDynamicElement'))
)
  

Keszowanie danych: Jeśli wielokrotnie pracujesz z tymi samymi danymi, rozważ ich keszowanie. Przechowuj dane w zmiennych lub keszu, aby zminimalizować zasobożerne operacje.

2. Udoskonalenie struktury skryptu

Jeśli twój kod jest czytelny jak mapa metra bez wskaźników i nazw stacji, czas go poprawić. Optymalna struktura kodu to klucz do łatwego zrozumienia i, co za tym idzie, odporności na błędy.

Użycie pipeline'ów danych i optymalnych rozwiązań algorytmicznych

Pomyśl o strukturze swojego kodu jako o pipeline'ach, gdzie każda funkcja lub moduł odpowiada za swoją część logiki. Podzielenie kodu na logiczne bloki nie tylko poprawia czytelność, ale też ułatwia debugowanie.

Python

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

def extract_data():
    # Kod do wyciągania danych
    pass

def save_data():
    # Kod do zapisywania danych
    pass

load_page("http://example.com")
extract_data()
save_data()
  

Poprawa czytelności i testowalności kodu

Trzymaj się zasady "jedna funkcja — jedno zadanie". To ułatwi testowanie i refaktoryzację. Używaj nazwanych stałych zamiast "magicznych liczb" i ciągów tekstowych dla większej jasności.

Python

MAX_RETRIES = 5

def fetch_data_with_retry():
    for attempt in range(MAX_RETRIES):
        try:
            # Próba zapytania o dane
            pass
        except Exception as e:
            print(f"Próba {attempt+1} nie powiodła się: {e}")
  

3. Jeśli kod można poprawić - należy go poprawić

Używaj jawnych oczekiwań zamiast niejawnych

Jawne oczekiwania pozwalają precyzyjnie kontrolować, kiedy Selenium zaczyna wykonywać akcje, czekając na pojawienie się odpowiednich elementów. Zamiast polegać na niejawnych oczekiwaniach (np. implicitly_wait), używaj biblioteki WebDriverWait, która pozwala dostosować oczekiwania dla konkretnych elementów na podstawie warunków (np. element jest widoczny, dostępny do kliknięcia, itd.).

Przykład użycia jawnego oczekiwania

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, "target_element"))
)
  
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION