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

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

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"))
)
1
Zadanie
Python SELF PL,  poziom 38lekcja 3
Niedostępne
Podstawy analizy wydajności skryptu
Podstawy analizy wydajności skryptu
2
Zadanie
Python SELF PL,  poziom 38lekcja 3
Niedostępne
Użycie jawnych oczekiwań
Użycie jawnych oczekiwań
4
Zadanie
Python SELF PL,  poziom 38lekcja 3
Niedostępne
Optymalizacja struktury kodu z użyciem funkcji
Optymalizacja struktury kodu z użyciem funkcji
Komentarze
  • Popularne
  • Najnowsze
  • Najstarsze
Musisz się zalogować, aby dodać komentarz
Ta strona nie ma jeszcze żadnych komentarzy