使用Selenium选择一个框架

时间:2016-05-31 13:08:56

标签: python selenium

所以我试图用硒选择一个框架。我在stackoverflow上找到了很多关于此问题的例子和类似问题。

所有人都指出,要选择框架中的元素,首先必须“移动”到该框架,然后获得所需的元素。 但我似乎无法得到我想要的框架。

我读过的所有帖子都说:

$exe =  ".\MyApp_2.3.64.exe"
$params = ("transform", "data.csv", "-output", "out", "-verbose")
& $exe $params

所以我尝试了所有这些,无论我使用什么,我总是得到一个错误,说它找不到框架,driver.switch_to.frame("contentfrm") # Fetch by name, or driver.switch_to.frame(1) # Fetch by index

python代码:

selenium.common.exceptions.NoSuchFrameException: Message: Unable to locate frame: contentfrm

HTML代码:

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()

driver.get("http://10.0.0.2/html/content1.asp")
driver.get("10.0.0.2")

elem = driver.find_element_by_name("Username")
elem.send_keys("admin")

elem = driver.find_element_by_name("Password")
elem.send_keys("admin2")

elem.send_keys(Keys.ENTER)

# ----
driver.switch_to.default_content()
driver.switch_to.frame("contentfrm")
# elem = driver.find_element_by_id("m8")

# driver.quit()

注意:代码可以正常工作,直到我必须选择框架。

知道为什么会发生这种情况

2 个答案:

答案 0 :(得分:2)

如果没有相关网站,很难确定问题所在,但我会做一些假设:

  • 您的框架集正在函数load()上执行一些javascript,这可能会在您尝试查找元素时使这些元素不可用。

  • 您获得的框架元素没有src属性,因此没有内容

  • 可能函数switchto.frame()中的选择不会像您认为的那样有效。

为了安全起见,最好等待元素可见,然后通过xpath

选择它
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//frame[@name='contentfrm']"))
)
driver.switch_to.frame(element)

答案 1 :(得分:1)

正如@Rafael所说,最好使用不同的定位器,你应该检查on load()javascript正在做什么。但是我建议使用框架的id作为定位器,而不是框架名称的xpath。

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "contentfrm")))
driver.switch_to.frame(element)