Kilka tygodni temu integracja miltiscrape również i u mnie przestała działać…
Postudiowałem głębiej temat i okazało się, że …zmienił się sposób logowania. Teraz formularz logowania korzysta z dynamicznego Javascript’u, ciasteczka wygasają po kilku minutach i …sesja się kończy.
Próbowałem różnych skryptów z użyciem Selenium i Chromium… wszystko jak krew w piach… ![]()
Mój skrypt .py po sanityzacji wygląda tak:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import paho.mqtt.publish as publish
import time
# 🔐 Dane logowania
username = "xxxxxxxxxx"
password = "xxxxxxxxxx"
# 📍 ID punktu sieci (wodomierza)
id_punktu = 1234567890
# 📡 MQTT
mqtt_host = "xxx.xxx.xxx.xxx"
mqtt_user = "mqtt_user"
mqtt_pass = "mqtt_password"
# 🔧 Konfiguracja przeglądarki
options = Options()
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)
# 🌐 Przejdź do strony
driver.get("https://ebok.mpwik.wroc.pl")
# Poczekaj na załadowanie formularza
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.ID, "login")))
# 🔐 Wprowadź dane logowania
driver.find_element(By.ID, "login").send_keys(username)
driver.find_element(By.ID, "password").send_keys(password)
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()
# Poczekaj na zalogowanie
time.sleep(5)
# 📥 Pobierz ciasteczka sesji
cookies = {c['name']: c['value'] for c in driver.get_cookies()}
driver.quit()
# 🔗 Pobierz dane zużycia wody
url = f"https://ebok.mpwik.wroc.pl/frontend-api/v1/odczyty-wodomierza?id_punktu={id_punktu}"
headers = {
"Accept": "application/json",
"User-Agent": "Mozilla/5.0"
}
response = requests.get(url, headers=headers, cookies=cookies)
if response.status_code != 200:
print(f"❌ Błąd pobierania danych: {response.status_code}")
exit(1)
try:
data = response.json()
except Exception as e:
print("❌ Nie udało się zdekodować JSON:", e)
print("Treść odpowiedzi:", response.text[:500])
exit(1)
# 🔢 Wyciągnij najnowsze wskazanie
odczyty = data.get("odczyty", [])
odczyty.sort(key=lambda x: x["data"], reverse=True)
wartosc = str(odczyty[0]["wskazanie"]) if odczyty else "0.0"
# 📡 Publikacja do MQTT
publish.single(
topic="home/mpwik/water_usage",
payload=wartosc,
hostname=mqtt_host,
auth={"username": mqtt_user, "password": mqtt_pass},
retain=True
)
print(f"✅ Opublikowano wartość: {wartosc} m³")
Tutaj moja wiedza chyba się kończy…
Może ktoś bardziej biegły pociągnie temat? Może warto…