【问题标题】:Python & Selenium: Element is not currently interactable and may not be manipulatedPython & Selenium:元素当前不可交互且可能无法操作
【发布时间】:2017-11-13 19:21:58
【问题描述】:

我对 Selenium 有点陌生,所以在尝试登录 Quora 网站后:

# gets email and password from json
    with open('config.json') as f:
        login_data = json.load(f)
    email = login_data['email']
    password = login_data['pass']

    email_field_xpath = "//input[@name='email']"
    password_field_xpath = "//input[@name='password']"
    login_button_xpath = "//input[@value='Login']"

    # webdriver's going to wait max 10 seconds for email's field, password field, login button to display
    email_field_element = WebDriverWait(driver, 10).until(
        lambda driver: driver.find_element_by_xpath(email_field_xpath))
    password_field_element = WebDriverWait(driver, 10).until(
        lambda driver: driver.find_element_by_xpath(password_field_xpath))

    email_field_element.clear()
    email_field_element.send_keys(email)
    password_field_element.clear()
    password_field_element.send_keys(password)

    # wait till element is visible before interaction
    login_button_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, login_button_xpath)))
    login_button_element.click()

我遇到了这个错误:

Traceback(最近一次调用最后一次): ...

log_in 中的文件“quora.py”,第 39 行 email_field_element.clear()

文件“/home/annieshlepak/work/QuoraAutomatization/env/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py”,第 92 行,清晰 self._execute(Command.CLEAR_ELEMENT) ...

selenium.common.exceptions.InvalidElementStateException: 消息:无效元素状态:元素当前不可交互且不可操作

【问题讨论】:

    标签: python selenium quora


    【解决方案1】:

    有两个input元素带有name="email"属性(你可以用len(driver.find_elements_by_xpath(email_field_xpath))查看)

    尝试通过索引定位所需的(第二个)元素

    driver.find_elements_by_xpath(email_field_xpath)[1].clear()
    

    或者使用更具体的XPath

    email_field_xpath = '//div[@class="form_column"]/input[@name="email"]'
    

    【讨论】:

    • @AnnieShlepak 作为旁注driver.find_element_byEC.presence_of_element_located 并不意味着该元素是可见的,只是它存在于DOM 中。您需要使用visibility_of expected conditionsis_displayed() 函数之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多