发现卡网站上登录按钮的selenium元素不可交互错误

pbwdgjma  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(575)

我正在尝试使用selenium登录discover card网站。此脚本将用于自动下载语句。
但是,我的功能适用于大多数网站,但不适用于发现卡登录表单。我的函数找到登录按钮(id为“ 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()
3df52oht

3df52oht1#

该页面上有两个id为“登录按钮”的元素。
如果您试图在模态隐藏时与模态中的一个进行交互,则会导致此类错误。
模式窗口的代码出现在默认登录框的代码之前,因此它首先找到隐藏的代码是有意义的。

你可以试试这些

(By.XPATH, '//input[@class="btn-primary log-in-button right"]')

# or

(By.CSS_SELECTOR, '.btn-primary.log-in-button.right')
puruo6ea

puruo6ea2#

我尝试使用以下代码登录您共享的网站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

相关问题