无法通过 Selenium 在 iframe 中定位元素

问题描述 投票:0回答:3

我是 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.

python selenium selenium-webdriver webdriver webdriverwait
3个回答
4
投票

需要切换到框架才能在文本框中写入文本,尝试检查一次语法,因为我的 Python 不太好

framLogin= driver.find_element_by_id("membeeLoginIF")
driver.switch_to.frame(framLogin)
EmailTxt = driver.find_element_by_name("txtUserName")
EmailTxt.send_Keys("[email protected]")

Java 也一样

WebElement framLogin= driver.findElement(By.id("membeeLoginIF"));
driver.switchTo().frame(framLogin);
WebElement EmailTxt = driver.findElement(By.name("txtUserName"));
EmailTxt.sendKeys("[email protected]");

3
投票

该站点需要启用第三方 cookie;没有它们,登录表单不会加载。很可能你的浏览器是这样配置的,但

webdriver.Firefox
的默认设置不是这样。

要查看 Selenium 实际看到的内容,转储

driver.page_source
和/或使用
driver.save_screenshot(...)
截屏。


3
投票

所需元素在

<iframe>
内。因此,根据最佳实践,您必须:

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

  • Induce WebDriverWait 所需的 element 可点击,您可以使用以下 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
    
© www.soinside.com 2019 - 2024. All rights reserved.