【问题标题】:Unable to locate element within an iframe through Selenium无法通过 Selenium 在 iframe 中定位元素
【发布时间】:2018-10-11 03:53:14
【问题描述】:

我是 Selenium 的新手。我正在尝试编写一个将登录到特定表单的 Python 脚本。表格位于http://www.tvta.ca/securedContent

我运行的代码是:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://tvta.ca/securedContent/")
elem = driver.find_element_by_name("txtUserName")
elem.clear()
elem.send_keys("<<my email>>")

我收到一条错误消息:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="txtUserName"]

我不确定我在这里缺少什么?我已经检查了网页的来源,登录字段肯定被命名为 txtUserName。

【问题讨论】:

  • 强调我的:http://tvta.ca/ securedContent / 可能...不是一个好兆头。
  • 需要切换到frame

标签: python selenium selenium-webdriver webdriver webdriverwait


【解决方案1】:

您需要切换到框架以在文本框中写入文本,尝试检查一次语法,因为我在 Python 中不太擅长

framLogin= driver.find_element_by_id("membeeLoginIF")
driver.switch_to.frame(framLogin)
EmailTxt = driver.find_element_by_name("txtUserName");
EmailTxt.send_Keys("Test@gmail.com");

Java 中也一样

WebElement framLogin= driver.findElement(By.id("membeeLoginIF"));
driver.switchTo().frame(framLogin);
WebElement EmailTxt = driver.findElement(By.name("txtUserName"));
EmailTxt.sendKeys("Test@gmail.com");

【讨论】:

    【解决方案2】:

    该网站需要启用第三方 cookie;没有它们,登录表单不会加载。您的浏览器可能是这样配置的,但 webdriver.Firefox 的默认值没有。

    要查看 Selenium 实际看到的内容,请转储 driver.page_source 和/或使用 driver.save_screenshot(...) 截屏。

    【讨论】:

      【解决方案3】:

      所需的元素在&lt;iframe&gt; 内。因此,根据最佳实践,您必须:

      • 诱导 WebDriverWait 使所需的框架可用并切换到它。

      • 诱导 WebDriverWait 使所需的元素可点击,您可以使用以下Locator Strategies

        WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"membeeLoginIF")))
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.textboxWaterMark#txtUserName"))).send_keys("Jeff")
        
      • 您必须添加以下导入:

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

      【讨论】:

        猜你喜欢
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多