У меня есть некоторый код селена для входа в jupyterlab (работает локально). Без ожидания происходит сбой, так как он пытается найти текстовое поле ввода пароля, прежде чем он существует. Поэтому я попытался использовать явное ожидание, так как это кажется самым чистым решением, но оно работает хаотично. Неявные ожидания никогда не работают, кажется, что веб-сервер блокируется на 10 секунд перед загрузкой страницы, поэтому всегда происходит сбой. time.sleep
всегда работает, однако загружает страницу и затем ждет 10 секунд, прежде чем ввести пароль, который неэффективен и менее чист, чем методы ожидания селена, которые, как я понимаю, ждут до 10 секунд, но останавливают ожидание, как только элемент становитсядоступный. Что я сделал не так?
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.wait import WebDriverWait
Явное ожидание - иногда работает
driver = webdriver.Firefox()
driver.get(f"http://localhost:8888")
wait = WebDriverWait(driver, 10)
password_input = wait.until(ec.presence_of_element_located((By.ID, "password_input")))
password = "my_password"
password_input.send_keys(password + Keys.RETURN)
иногда я получаю сообщение об ошибке:
selenium.common.exceptions.ElementNotInteractableException: Сообщение: Элемент недоступен с клавиатуры
Неявное ожидание - иногда ошибки
driver = webdriver.Firefox()
driver.get(f"http://localhost:8888")
driver.implicitly_wait(10)
password_input = driver.find_element_by_css_selector("password_input")
password = "my_password"
password_input.send_keys(password + Keys.RETURN)
иногда я получаю ошибку:
selenium.common.exceptions.ElementNotInteractableException: Сообщение: элемент недоступен с клавиатуры
time.sleep
- всегда работает
driver = webdriver.Firefox()
driver.get(f"http://localhost:8888")
time.sleep(10)
password_input = driver.find_element_by_id("password_input")
password = "my_password"
password_input.send_keys(password + Keys.RETURN)
Хотя это всегда работает, это бесполезно тратит время. И метод ожидания селена действительно должен работать.
Что я делаю не так?