< /blockquote>
Obwohl versucht wird, dieses Overlay und dieses Dialogfeld mit JavaScript zu entfernen, wird der Klick noch blockiert oder führt nicht die gewünschte Aktion aus. Manchmal sieht es so aus, als würde die Seite zurückgesetzt oder der Browser beendet. Other times, I get a JavaScript error like:
javascript error: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions...
Or:
Message: element not Interaktivierbar < /p>
< /blockquote>
Hier ist das, was ich versucht habe: < /p>
Klicken Sie mit Selenium direkt < /p>
klicken
Code: Select all
try:
driver.find_element(By.ID, 'ctl00_CPPC_ConfirmMessage_OSNR_btnOk').click()
except Exception as e:
print(f"❌ Failed: {e}")
< /code>
schlägt mit "Element -Klick -Klicken".try:
driver.execute_script("""
let overlay = document.querySelector('.ui-widget-overlay');
let dialog = document.querySelector('.ui-dialog');
if (overlay) overlay.remove();
if (dialog) dialog.remove();
""")
time.sleep(1)
except Exception as e:
print(f"❌ Overlay remove failed: {e}")
< /code>
< /li>
< /ol>
wird immer noch abgefangen. Manchmal schaltet der Browser sofort ab.try:
driver.execute_script("""
const btn = document.getElementById('ctl00_CPPC_ConfirmMessage_OSNR_btnOk');
if (btn) btn.click();
""")
except Exception as e:
print(f"❌ JavaScript click failed: {e}")
< /code>
Manchmal löscht dieser "die Eigenschaften von Null nicht lesen (lesen Sie 'klicken')."try:
driver.execute_script("DoButtonPostBack('ctl00$CPPC$btnShip');")
except Exception as e:
print(f"❌ Postback failed: {e}")
< /code>
Dies kann die Seite neu laden oder vollständig schließen.try:
driver.execute_script("""
if (window.jQuery) {
jQuery.fn.dialog = function() { return this; };
}
""")
except Exception as e:
print(f"❌ jQuery disable failed: {e}")
< /code>
< /li>
< /ol>
Immer noch kein Effekt. Overlay blockiert Aktion.print("✅ Removed overlay")
print("✅ Clicked OK button")
< /code>
Aber manchmal druckt es diese und tut immer noch nichts sichtbar oder beendet sofort. Ich habe sogar Kombinationen des Wartens und Interagierens versucht. Beispiel: < /p>
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'ctl00_CPPC_ConfirmMessage_OSNR_btnOk'))).click()
< /code>
ist immer noch fehlgeschlagen. /> [b] Was ich mit < /strong>: < /p>
Eine zuverlässige Methode zum Entfernen des Dialogfelds Overlay und Modal vollständig benötige. Nach dem Schließen oder Zurücksetzen nach dem Ausführen des Skripts. PrettyPrint-Override ">ok_button = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "ctl00_CPPC_ConfirmMessage_OSNR_btnOk"))
)
print("Displayed:", ok_button.is_displayed())
print("Enabled:", ok_button.is_enabled())
print("Size:", ok_button.size)
print("Location:", ok_button.location)
actions = ActionChains(driver)
actions.move_to_element(ok_button).click().perform()
< /code>
Ergebnis: < /p>
Element Klicken Sie unter Abfangen: Element ist nicht an Punkt anklickbar (...). Versucht, das Overlay und den Dialog manuell zu entfernen [/b] und auch die OK-Taste zu erzwingen, um sichtbar zu werden:
>driver.execute_script("""
let overlay = document.querySelector('.ui-widget-overlay');
let dialog = document.querySelector('.ui-dialog');
if (overlay) overlay.remove();
if (dialog) dialog.remove();
let btn = document.getElementById('ctl00_CPPC_ConfirmMessage_OSNR_btnOk');
if (btn) {
btn.style.display = 'block';
btn.style.visibility = 'visible';
btn.style.height = 'auto';
btn.style.width = 'auto';
}
""")
< /code>
Dann versuchte es mit: < /p>
zu klicken.driver.find_element(By.ID, 'ctl00_CPPC_ConfirmMessage_OSNR_btnOk').click()
< /code>
Neuer Fehler: < /p>
Stale Element Referenz: Stale Element [url=viewtopic.php?t=22532]nicht gefunden[/url] < /p>
< /Blockquote>
bedeutet, dass die Elementreferenz ungültig wurde. class = "Lang-Py PrettyPrint-Override"># Freshly locate it again before clicking
btn = driver.find_element(By.ID, 'ctl00_CPPC_ConfirmMessage_OSNR_btnOk')
driver.execute_script("arguments[0].click();", btn)
< /code>
Noch unzuverlässig. Manchmal fehlschlägt schweigend, manchmal keine Aktion, manchmal klicken Sie mit Abgefangenes
Code: Select all
Ein zuverlässiger Weg, um diese jQuery UI -Overlay zu entfernen oder zu besiegen. /> Lassen Sie mich wissen, ob Sie Protokolle, Screenshots oder ein HTML+-Skript -Bündel mit Reißverschluss einfügen möchten.>