【问题标题】:How to find_element(By.XPATH) and sending keys in selenium?如何在 selenium 中查找元素(By.XPATH)和发送密钥?
【发布时间】:2022-01-03 21:21:10
【问题描述】:

尝试更新我的代码以使用 "driver.find_element(By.XPATH..." 而不是 "driver.find_elements_by_xpath(...",但我在发送密钥时不断收到以下错误:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

这是我的代码:

driver = webdriver.Chrome(PATH)
link_login = "https://www.wyzant.com/tutor/jobs"

driver.get(link_login)

username_input = driver.find_element(By.XPATH, "//*[@id='Username']")[1]
username_input.send_keys("Test")

【问题讨论】:

    标签: python selenium google-chrome xpath webdriver


    【解决方案1】:

    使用find_elements 而不是find_element 来选择您在示例中所做的元素:

    driver.get('https://www.wyzant.com/tutor/jobs')
    username_input = driver.find_elements(By.XPATH, "//*[@id='Username']")[1]
    username_input.send_keys("Test")
    

    或更改您的 xpath 以选择更具体的'//form[@class="sso-login-form"]//*[@id="Username"]'

    driver.get('https://www.wyzant.com/tutor/jobs')
    username_input = driver.find_element(By.XPATH, '//form[@class="sso-login-form"]//*[@id="Username"]')
    username_input.send_keys("Test")
    

    【讨论】:

      【解决方案2】:
      1. 尝试使用更精确的 XPath 定位器。
      2. 整个 XPath 表达式应该在 (By.XPATH, "your_xpath_expression")
      3. 您还应该使用预期条件显式等待

      这应该可行:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[@action='/sso/login']//input[@id='Username']"))).send_keys(your_user_name)
      

      您需要导入这些导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      

      【讨论】:

        【解决方案3】:

        要在 用户名 字段中发送 字符序列,您需要为 WebDriverWait 引入 element_to_be_clickable(),您可以使用以下Locator Strategies:

        • 使用CSS_SELECTOR

          driver.get("https://www.wyzant.com/tutor/jobs")
          WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "form.sso-login-form input#Username"))).send_keys("rushi")
          
        • 使用XPATH

          driver.get("https://www.wyzant.com/tutor/jobs")   
          WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[@class='sso-login-form']//input[@id='Username']"))).send_keys("rushi")
          
        • 注意:您必须添加以下导入:

          from selenium.webdriver.support.ui import WebDriverWait
          from selenium.webdriver.common.by import By
          from selenium.webdriver.support import expected_conditions as EC
          

        【讨论】:

          猜你喜欢
          • 2017-05-24
          • 2020-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-08
          • 2020-09-22
          • 2021-01-01
          • 1970-01-01
          相关资源
          最近更新 更多