#python #selenium #selenium-webdriver
Вопрос:
Я использую Selenium Webdriver, чтобы установить флажок в форме и нажать «Сохранить» на той же странице. Флажок работает нормально, но не может нажать кнопку Сохранить. Я пробовал несколько решений без рабочего решения. Я добавляю режим сна, так как после нажатия кнопки сохранить вручную обработка занимает некоторое время.
Вот html-код для кнопки сохранить:
<input class="cbi-button cbi-button-apply" type="submit" name="cbi.apply" value="Save">
Вот мой код с использованием xpath (попытка 1):
driver.find_element_by_xpath("//input[@type='submit']").click()
time.sleep(20)
Результат попытки 1:
ElementNotInteractableException: Message: element not interactable
Попытка 2 с использованием цепочек действий, как предлагается в другом ответе:
button = driver.find_element_by_class_name(u"cbi-page-actions")
driver.implicitly_wait(10)
ActionChains(driver).move_to_element(button).click(button).perform()
time.sleep(20)
Во второй попытке ошибок не возникло, но при просмотре браузера кнопка сохранения, похоже, не была нажата. Я также проверил позже на странице, и изменения, которые я добавил, определенно не были сохранены.
Я также пытался использовать веб-формы, однако у меня есть противоположная проблема, когда я могу сохранить форму, но не могу установить флажок.
Ответ №1:
Попробуйте это
element = driver.find_element_by_xpath("//input[@type='submit']")
driver.execute_script("arguments[0].click();", element)
Ответ №2:
Вам следует подождать, прежде чем, возможно, элемент был загружен неправильно, а не после запуска click
Решение 1: Прямой щелчок с наихудшим типом явного ожидания
time.sleep(20)
driver.find_element_by_xpath("//input[@type='submit']").click()
Решение 2. Использование цепочки действий :
button = driver.find_element_by_css_selector("input[value='Save']")
ActionChains(driver).move_to_element(button).click(button).perform()
Решение 3. Использование динамического явного ожидания:-
wait = WebDriverWait(driver, 20)
wait.until(EC.element_to_be_clickable((By.NAME, "cbi.apply"))).click()
Импорт :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Решение 4: Использование Js
button = driver.find_element_by_name("cbi.apply")
driver.execute_script("arguments[0].click();", button)