Anmeldung Website Server Growatt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bei requests kann das nicht klappen, weil da das request nunmal komplett anders aussieht. Das musst du dir schon im Browser im Network-Tab anschauen, was da wirklich passiert, nicht einfach wild Werte uebernehmen.

{
"userName": "aaaaa",
"password": "aaaaa",
"lang": "en",
"loginTime": "2023-02-26+18:18:50",
"noRecord": "true",
"type": "1"
}

Wobei das jetzt die copy & paste-Darstellung ist, das ist natuerlich form-encodiert eigentlich

userName=aaaaa&password=aaaaa&lang=en&loginTime=2023-02-26+18%3A18%3A50&noRecord=true&type=1

Keine Ahnung, was dann passiert, weil ich keinen Account habe.

Und dein login-button-selector ist auch Quatsch, auch da gilt wieder: man muss schon sorgfaeltig damit umgehen. So sieht der Code aus:

Code: Alles auswählen

<button class="hasColorBtn loginB">Sign In</button>
Nix mit ID, wie du mit browser.find_element_by_id("loginBtn") unterstellst.
Chrissili
User
Beiträge: 42
Registriert: Sonntag 22. Januar 2023, 10:09

Ja was kann ich nun tun? Ist es aus eurer Sicht aussichtslos oder wie kann ich mich herantasten?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na du kannst richtig programmieren. Also die tatsaechlichen Formularwerte zum einloggen per requests benutzen, oder eben richtig mit Selenium arbeiten. Nicht Werte/Namen erraten.
Chrissili
User
Beiträge: 42
Registriert: Sonntag 22. Januar 2023, 10:09

Aber waren die nicht korrekt aus dem Quellcode ermittelt?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du meinen Beitrag gelesen? Da beziehe ich mich doch darauf, Quellcode aus der Seite inklusive.
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Man muß den Code korrekt lesen. Sollte eigentlich ganz einfach sein:

Code: Alles auswählen

import requests
import datetime

session = requests.Session()
response = session.post("https://Server.growatt.com/login", data={
    "userName": "username",
    "password": "password",
    "lang": "en",
    "loginTime": f"{datetime.datetime.now():%Y-%m-%d+%H:%M:%S}",
    "noRecord": "true",
    "type": "1",
})
print(response.json())
response = session.post("https://server.growatt.com/index/getPlantListTitle")
print(response.json())
response = session.post("https://server.growatt.com/selectPlant/getPlantTotal")
print(response.json())
response = session.post("https://server.growatt.com/selectPlant/getPlantList", data={
    "currPage": "1",
    "plantType": "-1",
    "orderType": "2",
    "plantName": "",
    })
print(response.json())
Jedenfalls mit dem Beispiellogin bekomme ich alle Daten frei haus geliefert:

Code: Alles auswählen

import requests

session = requests.Session()
response = session.get("https://server.growatt.com/login/toViewExamlePlant")
response = session.post("https://server.growatt.com/index/getPlantListTitle")
print(response.json())
response = session.post("https://server.growatt.com/selectPlant/getPlantTotal")
print(response.json())
response = session.post("https://server.growatt.com/selectPlant/getPlantList", data={
    "currPage": "1",
    "plantType": "-1",
    "orderType": "2",
    "plantName": "",
    })
print(response.json())
Chrissili
User
Beiträge: 42
Registriert: Sonntag 22. Januar 2023, 10:09

Hey vielen Dank das funktioniert natürlich bei mir auch.
Nur trotz Eingabe meiner Daten bei "userName" und "password" kommt dann
{'result': -2, 'msg': 'Username Password Error'}

Wie kann das jetzt sein?! Genau die gleichen Daten wenn ich diese manuell eingebe funktionierts?!?!

Tut mir so leid dass ich mich so anstelle...
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das kann zB ein escape-Code sein, wenn du einen \ im Passwort oder Benutzernamen hast. Wesentlich mehr faellt mir erstmal nicht ein. Darum bitte nochmal *genau* den Code zeigen (ohne dein echtes Passwort natuerlich), den du benutzt. Nicht ein wolkiges "also was Sirius3 gemacht hat".
Chrissili
User
Beiträge: 42
Registriert: Sonntag 22. Januar 2023, 10:09

Also ich habe das von Sirius3 ja exakt so verwendet. Lediglich mein Passwort hat einen "." mit drin. Sonst keine Sonderzeichen
Chrissili
User
Beiträge: 42
Registriert: Sonntag 22. Januar 2023, 10:09

Oder was meinst du mit "wolkiges"?
Chrissili
User
Beiträge: 42
Registriert: Sonntag 22. Januar 2023, 10:09

Sorry ich stehe gerade total auf dem Schlauch...
Benutzeravatar
sparrow
User
Beiträge: 4536
Registriert: Freitag 17. April 2009, 10:28

Das hat __deets__ doch geschrieben:
Du sollst deinen Code zeigen. Also den, den du verwendest. Passwort und Username ist das einzige, das du entfernst.
Und zwar wirklich den Code, den du verwendet. Kein "ich habe das so wie Sirius3 gemacht".
Aus deinem Editor kopieren, hier zwischen Code-Tags einfügen.
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Da scheint es mehrere Login-Aufrufe zu geben. Der letzte ist:

Code: Alles auswählen

response = session.post("https://Server.growatt.com/login", data={
    "account": "abc",
    "password": "abc",
    "validateCode": "",
    "isReadPact": "0",
})
Chrissili
User
Beiträge: 42
Registriert: Sonntag 22. Januar 2023, 10:09

Hallo anbei der Code aus meinem Editor:

Code: Alles auswählen

import requests
import datetime

session = requests.Session()
#response = session.get("https://server.growatt.com/login/toViewExamlePlant")
response = session.post("https://server.growatt.com/login", data={
    "userName": "",
    "password": "",
    "lang": "en",
    "loginTime": f"{datetime.datetime.now():%Y-%m-%d+%H:%M.%S}",
    "noRecord": "true",
    "type": "1",
})
print(response.json())

response = session.post("https://server.growatt.com/index/getPlantListTitle")
print(response.json())
response = session.post("https://server.growatt.com/selectPlant/getPlantTotal")
print(response.json())
response = session.post("https://server.growatt.com/selectPlant/getPlantList", data={
    "currPage": "1",
    "plantType": "-1",
    "orderType": "2",
    "plantName": "",
    })
print(response.json())
Chrissili
User
Beiträge: 42
Registriert: Sonntag 22. Januar 2023, 10:09

Sirius3 hat geschrieben: Montag 27. Februar 2023, 23:20 Da scheint es mehrere Login-Aufrufe zu geben. Der letzte ist:

Code: Alles auswählen

response = session.post("https://Server.growatt.com/login", data={
    "account": "abc",
    "password": "abc",
    "validateCode": "",
    "isReadPact": "0",
})
[/quote]

Hey das funktioniert! Da hat der Login geklappt.
Darf ich noch fragen, wo ihr diese Referenzen "https://server.growatt.com/selectPlant/getPlantTotal" oder "https://server.growatt.com/index/getPlantListTitle" gefunden habt? Sind die im Quelltext zu finden oder wo finde ich die verschiedenen Daten?
Besten Dank schon mal!!!
Chrissili
User
Beiträge: 42
Registriert: Sonntag 22. Januar 2023, 10:09

hat jemand ne Idee, wie ich noch konkretere weitere Werte erhalte, bzw. die Referenzen von "https://server.growatt.com/... " erkenne, was man da noch abgreifen kann?
Antworten