clear() не очищает текстовое поле с помощью селена, питона и firefox

clear() в этом случае не работает. Я получаю добавление за добавлением.
searchForMovie.clear() не работает... Я также пытался отправить
CTRL + 'a', а затем DELETE. Опять же, все, что у меня есть, это просто добавления ...

 for movie in allMissing:

            time.sleep (10)

            searchForMovie = WebDriverWait (driver, 10).until \
                (EC.presence_of_element_located ((By.CSS_SELECTOR, "#search-text")))  

            searchForMovie.send_keys (movie)

            # click
            enter = WebDriverWait (driver, 10).until \
                (EC.presence_of_element_located ((By.CSS_SELECTOR, "#search-submit")))  

            driver.execute_script ("arguments[0].click()", enter)


            # clear the search text box
            searchForMovie = WebDriverWait (driver, 10).until \
                (EC.presence_of_element_located ((By.CSS_SELECTOR, "#search-text")))

            searchForMovie.clear()

person LetzerWille    schedule 07.03.2018    source источник
comment
См. также: stackoverflow.com/a/50691625/363573   -  person Stephan    schedule 29.12.2019


Ответы (3)


Чтобы очистить текстовое поле, вам нужно вызвать WebDriverWait с expected_conditions, установленным на element_to_be_clickable, затем вызвать click() в WebElement, а затем вызвать clear() следующим образом:

# clear the search text box
searchForMovie = WebDriverWait (driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#search-text")))
searchForMovie.click()
searchForMovie.clear()
person DebanjanB    schedule 07.03.2018
comment
Я получил это сообщение об ошибке после того, как попробовал ваше решение. Ссылка на элемент ‹input id=search-text name=nm type=text› устарела; либо элемент больше не привязан к DOM, он не находится в контексте текущего фрейма, либо документ был обновлен - person LetzerWille; 07.03.2018
comment
После того, как вы searchForMovie.send_keys(movie), а затем driver.execute_script ("arguments[0].click()", enter), HTML DOM обязательно изменится. Поэтому вам нужно вернуться к тому же URL-адресу, с которого вы начали искать searchForMovie = WebDriverWait (driver, 10).until \ (EC.presence_of_element_located ((By.CSS_SELECTOR, "#search-text"))). - person DebanjanB; 07.03.2018
comment
Это не работает, я попробовал это при входе в Instagram. - person Jawad Ahmad Khan; 19.01.2020
comment
Итак, в каком контексте эта точка входа API clear() функционирует по замыслу? Это явно какой-то спецкожух, но не задокументированный в доступной для нас форме. - person Conrad B; 08.12.2020

Я думаю, что это должно быть так же просто, как:

driver.execute_script("$('#search-text').val('');")

Если вы хотите сделать это без jQuery, вы можете использовать обычный javascript:

document.getElementById('search-text').value = '';
person Esmay Kapol    schedule 19.01.2020
comment
Это решение не вызывает событие «изменение». - person Chuck; 21.09.2020
comment
Кроме того, изменение происходит асинхронно с последующим кодом Python. - person Chuck; 21.09.2020

В случае .clear() не работает, вы можете попробовать:

from selenium.webdriver.common.keys import Keys

#...your code (I was using python 3)

driver.find_element_by_id('foo').send_keys(Keys.CONTROL + "a");
driver.find_element_by_id('foo').send_keys(Keys.DELETE);
person Jortega    schedule 13.08.2020