Селеновый элемент не взаимодействует с ошибкой для кнопки входа в систему на веб-сайте Discover Card

#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