Selenium WebDriverWait不断抛出TimeoutException

Selenium WebDriverWait不断抛出TimeoutException,selenium,selenium-webdriver,iframe,webdriverwait,timeoutexception,frame,Selenium,Selenium Webdriver,Iframe,Webdriverwait,Timeoutexception,Frame,我使用Selenium登录到,如下所示: driver.switch_to.default_content() WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,'email'))).send_keys("myemail@gmail.com") 但我不断地得到一个错误: TimeoutException: Message: 我也尝试过: WebDriverWait(driver

我使用Selenium登录到,如下所示:

driver.switch_to.default_content()
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,'email'))).send_keys("myemail@gmail.com")
但我不断地得到一个错误:

TimeoutException: Message:
我也尝试过:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='email']"))).send_keys("myemail@gmail.com")
以下是我正在访问的源HTML代码:

<div id="signup-form">
    <div class="logo"></div>
    <h1 data-i18n="signin">Sign in</h1>
    <div class="panels-wrapper">
        <div class="panels">
            <div class="panel step-1">
                <input name="email" type="text" id="email" required="" maxlength="100">
                <label for="email" data-i18n="email">Email</label>

登录
电子邮件

感谢您的指导,以解决此问题

电子邮件不是一个框架。您使用的条件用于frame(iframe标记),但这里您处理的是输入标记。因此,我建议您根据您的要求检查该元素的可见性或该元素的存在。

电子邮件不是框架。您使用的条件用于frame(iframe标记),但这里您处理的是输入标记。因此,我建议您根据自己的要求检查该元素的可见性或该元素的存在情况。

有几件事需要注意

如果元素在a/内,没有相关元素,则很难构造规范答案。但是,根据您共享的,我没有看到任何
/


通常,要在元素内发送字符序列,您需要将
元素用于可点击()
,您可以使用以下任一选项:

  • CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("myemail@gmail.com")
    
    driver.get('site_url')
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe_cssSelector")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("myemail@gmail.com")
    
  • XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='email' and @name='email']"))).send_keys("myemail@gmail.com")
    
    driver.get('site_url')
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"iframe_xpath")))
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='email' and @name='email']"))).send_keys("myemail@gmail.com")
    
您可以在中找到相关的讨论


如果元素在某个范围内,则必须:

  • 诱导WebDriverWait以使所需帧可用并切换到该帧
  • 诱导WebDriverWait使所需元素可单击
  • 您可以使用以下任一选项:

    • 使用
      CSS\u选择器

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("myemail@gmail.com")
      
      driver.get('site_url')
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe_cssSelector")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("myemail@gmail.com")
      
    • 使用
      XPATH

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='email' and @name='email']"))).send_keys("myemail@gmail.com")
      
      driver.get('site_url')
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"iframe_xpath")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='email' and @name='email']"))).send_keys("myemail@gmail.com")
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
      您可以在中找到相关的讨论


参考文献 您可以在以下内容中找到一些相关讨论:


    • 有几件事你需要注意

      如果元素在a/内,没有相关元素,则很难构造规范答案。但是,根据您共享的,我没有看到任何
      /


      通常,要在元素内发送字符序列,您需要将
      元素用于可点击()
      ,您可以使用以下任一选项:

      • CSS\u选择器

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("myemail@gmail.com")
        
        driver.get('site_url')
        WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe_cssSelector")))
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("myemail@gmail.com")
        
      • XPATH

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='email' and @name='email']"))).send_keys("myemail@gmail.com")
        
        driver.get('site_url')
        WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"iframe_xpath")))
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='email' and @name='email']"))).send_keys("myemail@gmail.com")
        
      您可以在中找到相关的讨论


      如果元素在某个范围内,则必须:

      • 诱导WebDriverWait以使所需帧可用并切换到该帧
      • 诱导WebDriverWait使所需元素可单击
      • 您可以使用以下任一选项:

        • 使用
          CSS\u选择器

          WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("myemail@gmail.com")
          
          driver.get('site_url')
          WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe_cssSelector")))
          WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("myemail@gmail.com")
          
        • 使用
          XPATH

          WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='email' and @name='email']"))).send_keys("myemail@gmail.com")
          
          driver.get('site_url')
          WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"iframe_xpath")))
          WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='email' and @name='email']"))).send_keys("myemail@gmail.com")
          
        • 注意:您必须添加以下导入:

          from selenium.webdriver.support.ui import WebDriverWait
          from selenium.webdriver.common.by import By
          from selenium.webdriver.support import expected_conditions as EC
          
          您可以在中找到相关的讨论


      参考文献 您可以在以下内容中找到一些相关讨论:


      谢谢。我尝试了以下操作,但仍然收到一个“超时异常消息”错误:WebDriverWait(driver,15)。直到(EC.element可点击((By.XPATH,//div[@id='email']))为止。发送密钥(“mymail@gmail.com)谢谢。我尝试了以下操作,但仍然收到一个“超时异常消息”错误:WebDriverWait(driver,15)。直到(EC.element可点击((By.XPATH,//div[@id='email']))为止。发送密钥(“mymail@gmail.com)谢谢!CSS_选择器工作正常。登录名在弹出窗口中,所以我也必须添加:driver.switch\u to.window(driver.window\u句柄[0]),谢谢!CSS_选择器工作正常。登录名在弹出窗口中,因此我也必须添加:driver.switch\u to.window(driver.window\u处理[0])