Selenium - 如何在 iFrame 中发送密钥?

Selenium - How to send keys within an iFrame?

我正在编写一个 selenium 自动机器人,我想将密钥发送到我从 iFrame 获得的输入,检查代码行:

username = bot.find_element_by_xpath("//iframe[@title='Registration form' and @class='top']")

你们能帮帮我吗?我可以点击输入,但是在发送密钥时,它不起作用并取消选择输入字段。

您不会将 字符序列 发送到 <iframe> 元素,而是将 字符序列 发送到 [= <iframe> 中的 14=] 元素。由于所需的元素在 <iframe> 中,因此您必须:

  • 为所需的 frameToBeAvailableAndSwitchToIt.

    引入 WebDriverWait
  • 为所需的 elementToBeClickable.

    引入 WebDriverWait
  • 您可以使用以下任一项:

  • 使用XPATH:

    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@title='Registration form' and @class='top']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@attribure_name='attribute_value']"))).send_keys("Igor Duca")
    
  • 使用CSS_SELECTOR:

    driver.get('https://www.t-online.de/themen/e-mail')
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.top[title='Registration form']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[attribure_name='attribute_value']"))).send_keys("Igor Duca")
    
  • 注意:您必须添加以下导入:

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

You can find a relevant detailed discussion in


参考资料

您可以在以下位置找到一些相关讨论:

  • Is it possible to switch to an element in a frame without using driver.switchTo().frame(“frameName”) in Selenium Webdriver Java?