Это ответ на оригинальный вопрос:
Чтобы исправить вашу непосредственную проблему, используйте
driver.implicitly_wait(10)
Руководство - там
Однако вывероятно, идут совсем не в том направлении.Вместо этого попробуйте использовать модуль WebDriverWait
.
from selenium.webdriver.support.ui import WebDriverWait
Например:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#...
footer = WebDriverWait(driver, 10).until(EC.visibility_of_element_located(
(By.CSS_SELECTOR, ".b-footer__divider"))
)
Обновление для обновленной части вопроса:
Iпытаюсь отправить ключ в поле для комментариев на YouTube.Я удалил некоторый код, в настоящее время я выполняю этот код.
Как я и подозревал, вам там вообще не нужна функция implicitly_wait
.
Я просмотрел страницу YouTube.Ваш первый шаг правильный - вы находите поле «Добавить публичный комментарий ...» и щелкаете по нему.
Я пропускаю вызов implicitly_wait - он там ни на что не влияет.
На следующем шаге вы пытаетесь отправить нажатия клавиш в тот же ящик, который вы нашли и нажали.Это не верно.Хотя они выглядят одинаково, вы нажимаете на элемент с идентификатором simplebox-placeholder
, но после нажатия этот элемент становится невидимым, и тот же элемент с идентификатором contenteditable-textarea
готов получить ваш ввод.
В простом подходе вы должны найти этот элемент и послать в него нажатия клавиш:
commentr = driver.find_element_by_id("contenteditable-textarea")
commentr.click()
commentr.send_keys("HELO")
Но когда вы нажмете на simplebox-placeholder
, для выполнения страницы может потребоваться некоторое времянеобходимые действия и сделайте contenteditable-textarea
видимым и кликабельным.Приведенный ниже подход позволит вам избежать исключений, если элемент еще не готов:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
commentr = WebDriverWait(driver,10).until(EC.element_to_be_clickable( (By.ID, 'contenteditable-textarea') ))
commentr.click()
commentr.send_keys("HELO")
- Наконец, найдите кнопку «Комментарий» и нажмите ее, чтобы оставить свой комментарий.Здесь вы можете использовать упрощенный подход, потому что кнопка «Комментарий» уже готова:
driver.find_element_by_id("submit-button").click()
В целом ваш код может выглядеть так:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver.find_element_by_id("simplebox-placeholder").click()
commentr = WebDriverWait(driver,10).until(EC.element_to_be_clickable( (By.ID, 'contenteditable-textarea') ))
commentr.click()
commentr.send_keys("HELO")
driver.find_element_by_id("submit-button").click()