#python #selenium #selenium-webdriver
Вопрос:
Я пытаюсь использовать Selenium для входа на веб-сайт Discover Card. Этот скрипт будет предназначен для автоматизации загрузки инструкций.
Однако моя функция, которая работает для большинства веб-сайтов, не работает для формы входа в систему Discover Card. Мои функции находят кнопку входа в систему (идентификатор» log-in-button
«), но затем Selenium выходит из строя с ошибкой»» element not interactable
.
Это моя маленькая функция.
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
def login_by_id(username, password, username_id, password_id, login_button_id, driver):
# wait for form to be visible to Selenium
username_input = WebDriverWait(driver, 5).until(lambda x: x.find_element(By.ID, username_id))
# fill in form
username_input.send_keys(username)
password_input = driver.find_element_by_id(password_id)
password_input.send_keys(password)
# click on login button
login_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, login_button_id)))
login_button.click()
Комментарии:
1. Для каких целей вы использовали эти ценности
password_id, login_button_id
?
Ответ №1:
На этой странице есть два элемента с идентификатором «кнопка входа».
Если вы пытаетесь взаимодействовать с тем, кто находится в модальном, в то время как модальный скрыт, это приведет к ошибке такого типа.
Код для модального окна появляется до кода для поля входа по умолчанию, поэтому имеет смысл сначала найти скрытое окно.
Вы могли бы попробовать эти
(By.XPATH, '//input[@class="btn-primary log-in-button right"]')
#or
(By.CSS_SELECTOR, '.btn-primary.log-in-button.right')
Комментарии:
1. Спасибо. Это все исправило для меня. Я не исключил, что у двух элементов будет один и тот же идентификатор. Спасибо, что так хорошо все объяснили. 🤓
2. Теоретически, они не должны этого делать. На практике я сталкиваюсь с этим чаще, чем хотелось бы. Я даже зашел так далеко, чтобы написать функцию, которая дважды проверяет предположение о том, что искомый идентификатор уникален на странице.
Ответ №2:
Я попытался войти на URL-адрес веб-сайта, которым вы поделились, с помощью приведенного ниже кода, похоже, все работает нормально :
driver.maximize_window()
driver.implicitly_wait(30)
driver.get("https://www.discover.com/")
wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.ID, "userid-content"))).send_keys('some user name')
wait.until(EC.element_to_be_clickable((By.ID, "password-content"))).send_keys('some password')
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='content-login-checkbox'] input input"))).click()
Импорт :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC