From a85b6dcdd612240adad53e491899011d011b1186 Mon Sep 17 00:00:00 2001 From: Claude Project Manager Date: Sun, 14 Sep 2025 03:40:11 +0200 Subject: [PATCH] TikTok - PW Problem zur Haelfte gefixt --- database/accounts.db | Bin 364544 -> 368640 bytes social_networks/tiktok/tiktok_registration.py | 60 +++++++++++------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/database/accounts.db b/database/accounts.db index 4a6d6d13d6f0811cc4ce4a21bd252a4065e20650..85afaaf4f75af797c4d52786a7a49d99fe5be603 100644 GIT binary patch delta 852 zcma)4%S%*o6u$R2zsoqz%NcXVN7?le8g=z|Uo-cL*l5%u6!M0F2I)L*)8IHWj24mT zIGQ7Yi((eXO&OGnAPRFaL|8_Pq(~Fo1cgBaK~RE!KwYa%tz4Y5INv!R-}iAQ?sz6v zJU6PCDT<={ZnDSdsl|c$W;*(+F)9X1D2Xl>c-AAC3r;&hwI=(`7;7BuNoCMG6HuMfa&e-Y146F{Cw`dT406 z#?;S{9oi^VAUmeb{U*&31#=0$iyYCyBEidclZDm_@oGHh`X764-$mN+9BtBUqhJmg zSGG|@<+{~cY^tCW$@EY#uFd2+aUs{qjF-C2)@jPw;kf5;+C#P{wmR#yv7NLAvQ^;{ zs)DOIM>UAMj(aF-BsMsb92`vQ@kA`ue^F0g?N^B?XkETTT37w4$X{d^P)UBHx)Q2~ zn4;D*!9+qAh#+%B<#>rDVvDG>@bX?VDb&T8k9Ea%LjY~bP?n4#?vmxi?6`KYCtEj3 zPpOm5xrUkp+1?{4>uRT5IWJd16;YNwki$DSQ&uhcC0XG`QScE(=869(TRW`lk=hnk z@JoJpQDbU_Kq;fpGGsl7h4rV%3qN0>66m>(OM(50?C|9!a>D2;a^@#y?XdP4Ss~QS zl$M><(~)2zSZi>0#G>r+;BY*dfZ#kXgVYGN!1yDh-Fkq`5dMHF;msyK3D5em9Rf?J z23Fo8ccE<=(KPhEMhhiGRC&QK$g1DxQ&plu_YYL=HgYAZsERz1WmS+w(FYq*?1la@ zTm;|lqkXV8##rI>0utQ+#NQ+lNr6-&!@=$IxEsDd#0spIGkb97Os1o;-?rK>>xozz cHm+bFyw5N$PlU)s=EEUH35mMMOMf2j7b#ZyHvj+t delta 195 zcmZoTAl9%zY=Sgv0|Ns??R_5@1DPf(7-&y^kj64yuZ2~m-QY7L5HoEz_{@AohB=Tg zXF9t8%VMAbhj_Q=$g#{2L>IGTnZd{$$kR5R-2trb4)^qG9~Q3m2|g^_C-|_I2n(?B dC^PUo@h#!w=S||-$)gN3jGt$_at`ZVWdI(8I`sem diff --git a/social_networks/tiktok/tiktok_registration.py b/social_networks/tiktok/tiktok_registration.py index ede1cda..98796f5 100644 --- a/social_networks/tiktok/tiktok_registration.py +++ b/social_networks/tiktok/tiktok_registration.py @@ -1042,14 +1042,23 @@ class TikTokRegistration: # Nach Code-Eingabe erscheint ein neues Passwort-Feld # Verschiedene Selektoren für das Passwort-Feld nach Code-Eingabe password_selectors = [ - # Aktueller Selektor basierend auf Console-Output - "input[type='password'][placeholder='Passwort']", - "input.css-wv3bkt-InputContainer.etcs7ny1", - "input.css-wv3bkt-InputContainer", - "input.etcs7ny1[type='password']", - # Original Selektor + # Neue TikTok CSS-Klassen (2025) + "input.css-15uxi3b-5e6d46e3--InputContainer", # Neue spezifische Klasse + "input.epfb2861[type='password']", # Neue zusätzliche Klasse + "input[class*='InputContainer'][type='password']", # Partial class match + + # Generische Selektoren (stabiler) + "input[type='password'][placeholder='Passwort']", # Type + Placeholder + "input[type='password'][autocomplete='new-password']", # Type + Autocomplete + "input[placeholder='Passwort']", # Nur Placeholder + + # Alte Selektoren (Fallback) + "input.css-wv3bkt-InputContainer.etcs7ny1", # Alt TikTok-Klasse + "input.css-wv3bkt-InputContainer", # Alt TikTok-Klasse + "input.etcs7ny1[type='password']", # Alt TikTok-Klasse + + # Original und weitere Fallbacks self.selectors.PASSWORD_FIELD, - # Fallback-Selektoren "input[type='password']", "input[placeholder*='Passwort']", "input[placeholder*='Password']", @@ -1057,23 +1066,26 @@ class TikTokRegistration: ] password_success = False - for selector in password_selectors: - if self.automation.browser.is_element_visible(selector, timeout=2000): - logger.info(f"Passwort-Feld gefunden: {selector}") - # Verwende Character-by-Character Eingabe für Passwort-Feld - password_success = self._fill_password_field_character_by_character(selector, account_data["password"]) - if password_success: - # VALIDATION: Prüfe ob Passwort tatsächlich im Feld steht - self.automation.human_behavior.random_delay(0.5, 1.0) - actual_value = self._get_input_field_value(selector) - if actual_value == account_data["password"]: - logger.info("Passwort erfolgreich eingegeben und validiert") - break - else: - logger.warning(f"Passwort-Validierung fehlgeschlagen: erwartet='{account_data['password']}', erhalten='{actual_value}'") - password_success = False - else: - logger.debug(f"Passwort-Eingabe mit Selektor {selector} fehlgeschlagen") + for i, selector in enumerate(password_selectors): + logger.debug(f"Versuche Passwort-Selektor {i+1}/{len(password_selectors)}: {selector}") + try: + if self.automation.browser.is_element_visible(selector, timeout=1000): + logger.info(f"✓ Passwort-Feld gefunden mit Selektor {i+1}: {selector}") + # Verwende Character-by-Character Eingabe für Passwort-Feld + password_success = self._fill_password_field_character_by_character(selector, account_data["password"]) + if password_success: + # VALIDATION: Prüfe ob Passwort tatsächlich im Feld steht + self.automation.human_behavior.random_delay(0.5, 1.0) + actual_value = self._get_input_field_value(selector) + if actual_value == account_data["password"]: + logger.info("Passwort erfolgreich eingegeben und validiert") + break + else: + logger.warning(f"Passwort-Validierung fehlgeschlagen: erwartet='{account_data['password']}', erhalten='{actual_value}'") + password_success = False + except Exception as e: + logger.debug(f"Passwort-Selektor {i+1} fehlgeschlagen: {e}") + continue if not password_success: logger.warning("Fallback 1: Versuche UI Helper für Passwort-Eingabe")