ElementNotInteractableException:元素不可交互错误,将文本发送到电子邮件字段

时间:2020-02-22 14:26:17

标签: python selenium selenium-webdriver

设置

尝试使用Python和Selenium登录this log-in form


代码

url = 'https://activeshop.com.pl/customer/account/login/'
browser.get(url)


# fill out login details 
account_name = 'my@email.com' 
password = 'mypassword' 

login_details = {
                'login': account_name,
                'password': password
                }

# inserts account name in login field      
fill_field('id','email',login_details['login'])      

# inserts password in password field
fill_field('id','pass',login_details['password'])   

哪里

def fill_field(type, type_path, input):
    if type == 'id':
        field = browser.find_element_by_id(type_path)        
    field.clear()
    field.send_keys(input)

问题

上面的代码曾经可以工作,但是由于站点已进行了改头换面,因此在尝试填写字段时会产生ElementNotInteractableException: element not interactable

我尝试了XpathsCSS选择器和其他选择器,但未填写电子邮件地址和密码。

我可以通过Selenium获取页面上的文本。

input元素处有一些元素会阻止Selenium。有任何想法吗?

2 个答案:

答案 0 :(得分:3)

页面上有1个以上的email,第一个不可见。您可以获取所有元素,然后过滤可见的元素:

field = list(filter(lambda x: x.is_displayed(), browser.find_elements(By.ID, "email")))[0]
field.send_keys("email")

答案 1 :(得分:1)

要将字符序列发送到电子邮件Hasło字段,您需要为element_to_be_clickable()诱导 WebDriverWait ,您可以使用以下Locator Strategy

  • 使用XPATH

    driver.get("https://activeshop.com.pl/customer/account/login/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='E-mail']//following::input[@class='input-text' and @id='email']"))).send_keys("my@email.com")
    driver.find_element_by_xpath("//span[text()='Hasło']//following::input[@class='input-text' and @title='Hasło']").send_keys("mypassword")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

activeshop_com