用硒选择fram

2024-10-01 00:14:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

他们都指出,要选择一个框架中的元素,首先必须“移动”到该框架,然后获得所需的元素。 但我好像拿不到我想要的相框。在

我说要用这篇博文:

driver.switch_to.frame("contentfrm") # Fetch by name, or
driver.switch_to.frame(1) # Fetch by index

所以我尝试了所有的方法,不管我用什么方法,我总是得到一个错误,说它找不到框架,selenium.common.exceptions.NoSuchFrameException: Message: Unable to locate frame: contentfrm

python代码:

^{pr2}$

HTML代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Quick Start</title>
</head>

<frameset onload="load()" rows="0,*" frameborder="0" border="0" framespacing="0">
    <frame name="topFrame" scrolling="no" src="../main/refresh.asp" __idm_frm__="200"></frame>
    <frame name="contentfrm" id="contentfrm" __idm_frm__="201"></frame>
</frameset>

</html>

注意:代码工作正常,直到我必须选择帧。在

知道为什么会这样吗


Tags: to方法代码name框架元素byhtml
2条回答

如果没有相关网站,很难确定问题出在哪里,但我将采取一些假设:

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

  • 您得到的frame元素没有src属性,因此它将没有内容

  • 也许函数switchto.frame()中的选择并没有像您想象的那样工作。

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

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

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

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

相关问题 更多 >