精华内容
下载资源
问答
  • selenium之 定位以及切换frame(iframe)

    万次阅读 多人点赞 2016-08-13 17:34:04
    很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug也可以看到,就是定位不到,这种情况很有可能是frame在搞鬼(原因之一,改天专门说说定位不到元素,可能的一些原因及处理...

    更多关于python selenium的文章,请关注我的专栏:Python Selenium自动化测试详解


    总有人看不明白,以防万一,先在开头大写加粗说明一下:

    frameset不用切,frame需层层切!


    很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug也可以看到,就是定位不到,这种情况很有可能是frame在搞鬼(原因之一,改天专门说说定位不到元素,可能的一些原因及处理办法)。

    frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。

    1.怎么切到frame中(switch_to.frame())

    selenium提供了switch_to.frame()方法来切换frame

    switch_to.frame(reference)

    不得不提到switch_to_frame(),很多人在这样写的时候会发现,这句话被划上了删除线,原因是这个方法已经out了,之后很有可能会不支持,建议的写法是switch_to.frame()

    reference是传入的参数,用来定位frame,可以传入id、name、index以及selenium的WebElement对象,假设有如下HTML代码 index.html:

    <html lang="en">
    <head>
        <title>FrameTest</title>
    </head>
    <body>
    <iframe src="a.html" id="frame1" name="myframe"></iframe>
    </body>
    </html>

    想要定位其中的iframe并切进去,可以通过如下代码:

    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.switch_to.frame(0)  # 1.用frame的index来定位,第一个是0
    # driver.switch_to.frame("frame1")  # 2.用id来定位
    # driver.switch_to.frame("myframe")  # 3.用name来定位
    # driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))  # 4.用WebElement对象来定位

    通常采用id和name就能够解决绝大多数问题。但有时候frame并无这两项属性,则可以用index和WebElement来定位:

    • index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位
    • WebElement对象,即用find_element系列方法所取得的对象,我们可以用tag_name、xpath等来定位frame对象

    举个栗子:

    <iframe src="myframetest.html" />

    用xpath定位,传入WebElement对象:

    driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src,'myframe')]"))

    2.从frame中切回主文档(switch_to.default_content())

    切到frame中之后,我们便不能继续操作主文档的元素,这时如果想操作主文档内容,则需切回主文档。

    driver.switch_to.default_content()

    3.嵌套frame的操作(switch_to.parent_frame())

    有时候我们会遇到嵌套的frame,如下:

    <html>
        <iframe id="frame1">
            <iframe id="frame2" / >
        </iframe>
    </html>

    1.从主文档切到frame2,一层层切进去

    driver.switch_to.frame("frame1")
    driver.switch_to.frame("frame2")

    2.从frame2再切回frame1,这里selenium给我们提供了一个方法能够从子frame切回到父frame,而不用我们切回主文档再切进来。

    driver.switch_to.parent_frame()  # 如果当前已是主文档,则无效果

    有了parent_frame()这个相当于后退的方法,我们可以随意切换不同的frame,随意的跳来跳去了。

    所以只要善用以下三个方法,遇到frame分分钟搞定:

    driver.switch_to.frame(reference)
    driver.switch_to.parent_frame()
    driver.switch_to.default_content()

    补充

    另外补充一下,之前曾看到过用点分法来切入嵌套frame的方法,但我试验之后发现并不能定位到frame,如果有同学可以成功,麻烦留言告知一下,用法如下:

    driver.switch_to.frame('frame1.0.frame3')

    据说以上代码可以切到 “frame1” 下的 “第一个frame” 下的 “frame3” 中。

    展开全文
  • 解决iframe跨域传参(Blocked a frame with origin)

    万次阅读 多人点赞 2019-09-24 16:04:14
    一.问题描述 使用iframe通过iframe子页面调用父页面或父页面调用iframe子页面时,...Blocked a frame with origin “http://localhost:****” from accessing a cross-origin frame. 二.解决方案 以上问题可通过...

    一.问题描述

    使用iframe通过iframe子页面调用父页面或父页面调用iframe子页面时,因为违反了浏览器安全策略,无法跨iframe获取到另一页面的数据,在控制台中可以看到如下报错

    Blocked a frame with origin “http://localhost:****” from accessing a cross-origin frame.

    二.解决方案

    以上问题可通过postMessage方法安全地跨iframe进行通信。

    1.iframe子页面调用父页面

    • 子页面数据发送
    // data为子页面发送的数据(可以是一个js对象,会被自动序列化处理)
    window.parent.postMessage(data, '*')
    
    • 父页面数据监听
    addEventListener('message', e => {
        // e.data为子页面发送的数据
        console.log(e.data)
    })
    
    

    2.父页面调用iframe子页面

    • 父页面数据发送
    document.getElementById('iframe').contentWindow.postMessage(data,'*')
    
    • 子页面接收数据
    addEventListener('message', e => {
        // e.data为父页面发送的数据
        console.log(e.data)
    })
    

    3.安全性优化- 发送数据限制接收源

    在上边的代码中postMessage的第二个参数被设置为’*’,意为任意源,这里可以指定接收源,示例代码如下

     window.parent.postMessage('exit','http://example.org');
    
    • 监听到数据检测发送来源
    addEventListener('message', e => {
        if(e.origin === 'http://example.org') {
            // 仅在数据发送来源自受信任的地址才执行对应操作
        }
    })
    

    END

    展开全文
  • Tkinter Frame清空

    万次阅读 多人点赞 2019-01-22 11:49:40
    Tkinter Frame清空 在使用python做GUI界面的时候,使用了Tkinter基本图形库 想在界面上动态删除或添加控件 问题是当控件多的时候一个个操作就很麻烦,而且有些控件没有命名,操作很复杂 我的做法是,将需要整体...

    Tkinter Frame清空

    在使用python做GUI界面的时候,使用了Tkinter基本图形库
    想在界面上动态删除或添加控件
    问题是当控件多的时候一个个操作就很麻烦,而且有些控件没有命名,操作很复杂

    我的做法是,将需要整体添加或删除的控件添加到一个Frame框架中,对框架中的控件进行清空,只需要下面的命令就够了

    for widget in frame.winfo_children():
            widget.destroy()
    

    其中frame为框架的名字,widget是循环变量名,表示控件
    对frame中的每个控件进行destory()操作,就能删除控件
    类似的,也有清空控件值的方式,如下

    frame.pack_forget() #用于pack布局
    frame.grid_forget() #用于grid布局
    

    forget之后,还可以正常使用该控件,只是从视图上被隐藏而已
    控件和框架都可以进行该操作。

    补充

    Tkinter常用框架有LabelFrame、Frame等等

    参考Python Tkinter clearing a frame

    展开全文
  • frame简单使用

    千次阅读 2018-06-30 15:39:07
    frame,是网页开发必须掌握的知识。例如后台架构、局部刷新,页面分割,都是frame的用途表现,尤其是后台页面制作,使用frame会给用户带来非常舒适的使用感受。frame知识点包括(frameset标签、frame标签、iframe...
    
    
    frame知识点包括(frameset标签、frame标签、iframe标签)。下面就对其一一介绍。
    一、frameset

    1. 属性

    ①border

    设置框架的边框粗细。
    ②bordercolor
    设置框架的边框颜色。
    ③frameborder
    设置是否显示框架边框。设定值只有0、1;0 表示不要边框,1 表示要显示边框。
    ④cols
    纵向分割页面。其数值表示方法有三种:“30%、30(或者30px)、*”;数值的个数代表分成的视窗数目且数值之间用“,”隔开。“30%”表示该框架区域占全部浏览器页面区域的30%;“30”表示该区域横向宽度为30像素;“*”表示该区域占用余下页面空间。例如:cols="25%,200,*" 表示将页面分为三部分,左面部分占页面30%,中间横向宽度为200像素,页面余下的作为右面部分。
    ⑤rows
    横向分割页面。数值表示方法与意义与cols相同。
    ⑥framespacing
    设置框架与框架间的保留的空白距离。

    2. 用例

    <frameset cols="213,*" frameborder="no" border="0" framespacing="0">
    注意1:
    cols与rows两属性尽量不要同在一个<frameset>标签中使用。若要实现下图架构,代码正确写法为:
    Frameset使用教程
    <frameset rows="59,*" cols="*" frameborder="no" border="0" framespacing="0">
      <frame src="top.jsp" name="topFrame" scrolling="No" noresize="noresize" id="topFrame"/>
      <frameset cols="213,*" frameborder="no" border="0" framespacing="0">
        <frame src="left.jsp" name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame"/>
        <frame src="main.jsp" name="mainFrame" id="mainFrame"/>
    【即,若想即使用cols又使用rows,可利用frameset嵌套实现】
    注意2:
    <frameset cols="40%,*,*">
    意思是:第一个框架占整个浏览器窗口的40%,剩下的空间平均分配给另外两个框架。
    <frameset cols="*,*,*,*">
    意思是:浏览器窗口等分为四部分。
     
    二、frame
    1. 属性
    ①name
    设置框架名称。此为必须设置的属性。
    ②src
    设置此框架要显示的网页名称或路径。此为必须设置的属性。
    ③scrolling
    设置是否要显示滚动条。设定值为auto, yes, no。
    ④bordercolor
    设置框架的边框颜色。
    ⑤frameborder
    设置是否显示框架边框。设定值只有0、1;0 表示不要边框,1 表示要显示边框。
    ⑥noresize
    设置框架大小是否能手动调节。
    ⑦marginwidth
    设置框架边界和其中内容之间的宽度。
    ⑧marginhight
    设置框架边界和其中内容之间的高度。
    ⑨width
    设置框架宽度。
    ⑩height
    设置框架高度。
    2. 用例
    <frame src="top.jsp" name="topFrame" scrolling="No" noresize="noresize" marginwidth="10" marginhight="10" width="400" height="800" />
     
    三、iframe
    是浮动的框架(frame),其常用属性与frame类似,其他的主要有以下(相同的就不列举了)
    1. 属性
    ①align
    设置垂直或水平对齐方式
    ②allowTransparency
    设置或获取对象是否可为透明。
    2. 用例
    <iframe name="123" align="middle" marginwidth="0" marginheight=0 src="*.jsp" frameborder="0" scrolling="no" width="776" height="2500"></iframe>
    注意:
    iframe标签与frameset、frame标签的验证方法不同,是 XHTML 1.0 Transitional。且iframe是放在body标签之内,而frameset、frame是放在body标签之外。
     
    四、综合示例
    <html>
    <head>
    <title>综合示例</title>
    </head>
    <frameset cols="25%,*">
    <frame src="menu.htm" scrolling="no" name="Left">
    <frame src="page1.htm" scrolling="auto" name="Main">
    <noframes>
    <body>
    <p>对不起,您的浏览器不支持“框架”!</p>
    </body>
    </noframes>
    </frameset>
    </html>
    【说明】
    <noframes></noframes>标志对也是放在<frameset></frameset>标志对之间,用来在那些不支持框架的浏览器中显示文本或图像信息。在此标志对之间先紧跟<body></body>标志对,然后才可以使用我们熟悉的任何标志。
     
     
    最后需要说明一点:
    如果将代码按照我以上所写写到VS中报错的话,例如:
    Frameset使用教程
    或者
    Frameset使用教程
    解决方法如下:
    工具→选项→文本编辑器→HTML→验证→Internet Explorer 6.0
    展开全文
  • RVIZ 使用的时候如果fixed frame选项设置不正确,那么就会无法显示显示相应的数据信息,并提示一下错误 :“For frame [XX]: Fixed Frame [map] does not exist” 官方文档对该选项的解释为: The Fixed Frame/...
  • Frame frame这个控件的刷新方法,在页面加载完成之后如何刷新
  • tkinter窗口布局Frame

    千次阅读 2020-03-22 07:53:12
    emmm,看起来并不是想要的亚子,框架会保证各个frame的相对位置,大小时可变大小的,随着内容而增大 Frame应用实例 tk.Label(window, text='on the window').pack() # 在window上创建一个frame frm = tk.Frame...
  • Frame的使用

    千次阅读 2019-01-06 14:53:30
    最近,老大分配给我的任务中,使用到了frame这个技术。因为之前只是了解到使用frame可以将多个页面组合到一起,但是我并没有使用过。所以此时我是一脸懵逼的使用,中间遇到的很多的坑。鉴于此,决心学习一下frame的...
  • Tkinter-Frame

    千次阅读 2018-07-06 16:52:12
    The Tkinter Frame WidgetFrame(框架)组件是在屏幕上的一个矩形区域。Frame 主要是作为其他组件的框架基础,或为其他组件提供间距填充。何时使用 Frame 组件? Frame 组件主要用于在复杂的布局中将其他组件分组,...
  • Java之Frame

    千次阅读 2014-04-05 19:57:42
    Java之Frame 1、测试Java中的Frame  具体实现如下: /** * @Title:FrameJava.java * @Package:com.you.model * @Description: * @Author: 游海东 * @date: 2014年4月5日 下午7:09:29 * @Version V1.2.3 */...
  • 运行$ roslaunch mbot_description arbotix_mbot_with_camera_xacro.launch文件出现如下错误时: 解决办法:更改Fixed Frame,选择base_link。问题得到解决。
  • X-Frame-Options 响应头 注意: CSP Level 2 规范中的 frame-ancestors 指令会替代这个非标准的 header。CSP 的 frame-ancestors 会在 Gecko 4.0 中支持,但是并不会被所有浏览器支持。然而 X-Frame-Options 是个已...
  • Page Rendering - Main Frame and Impl Frame

    千次阅读 2016-01-28 14:39:24
    这是准备在内核组技术分享会上做的一次技术分享,主要是介绍网页渲染里面 Main Frame 和 Impl Frame 的含义,从而让读者对网页绘制的完整过程有一个基本概念。另外还略略说明了 Chromium 正在进行中的一些较大的架构...
  • 其中有一个“X-Frame-Options漏洞”问题。我抓耳挠腮的一度不知道怎么解决,最后在我的不屑坚持下.......嘻嘻。愿遇到该BUG的人都能处理掉。我们先看看渗透报告中的东西,以失败而告终。 广告:由于我的博文《docker...
  • 报错信息已经描述的很明确了,在frame嵌套页面的时候被拒绝了,拒绝原因是Header头中的X-Frame-Options属性的值为‘deny’。 这个机制是为了防止站点被劫持。 解决: 这个问题需要修改Nginx或者Apache的配置,...
  • 栈帧 Stack Frame

    千次阅读 2018-03-12 14:49:50
    栈帧 Stack Frame 前言最近在 Coursera 上学习 Maryland 大学的 「Software Security」 课程。第一周讲的是有关 Memory-based attacks 的介绍,在第二个视频 Memory Layout 中,涉及到了 Stack Frame 的知识点,...
  • 1.DENY:浏览器拒绝当前页面加载任何Frame页面。 2.SAMEORIGIN:页面只能加载入同源域名下的页面。 3.ALLOW-FROM uri:只能被嵌入到指定域名的框架中。 /** * 配置“X-Frame-Options头” */ @WebFilter...
  • Python的Frame对象

    千次阅读 2019-06-29 19:52:24
    Frame对象表示执行帧。它们可能出现在traceback对象中。 参考链接: https://docs.python.org/2/reference/datamodel.html#objects-values-and-types Frame对象可以用来获取Python运行过程中的函数调用堆栈,或者...
  • X-Frame-Options DENY:禁止iframe SAMEORIGIN:只允许相同域名下的网页iframe,同源政策保护 ALLOW-FROM: https://example.com:白名单限制 但这个缺陷就是chrome、Safari是不支持ALLOW-FROM语法! php代码如下...
  • 使用X-Frame-Options防止网页被Frame 防止被 FRAME 加载你的网站页面 1. meta 标签:很多时候没有效果,无视 [html] view plain copy   meta http-equiv="Windows-Target" contect=...
  • 关于x-frame-options结合nginx防止frame劫持攻击相关配置,网关关于frame劫持攻击的配置很多,但是配置 X-Frame-Options ALLOW-FROM uri 在nginx.conf配置文件中在http或者server中配置 add_header X-Frame-...
  • Ethernet frame

    千次阅读 2013-06-08 17:36:46
    原文地址:...   [come from: wikipedia] http://en.wikipedia.org/wiki/Ethernet_frame  A data packet on an Ethernet link is called an Ethernet frame. A
  • 有时候为了防止网页被...X-Frame-Options 响应头有三个可选的值: DENY:页面不能被嵌入到任何iframe或frame中; SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中; ALLOW-FROM:页面允许frameframe加载。
  • NoSuchFrameException: Message: no such frame: element is not a frame in frame raise NoSuchFrameException(frame_reference) selenium.common.exceptions.NoSuchFrameException: Message: ...
  • 参考:... 1、frame.Navigate: 优点——可以支持页面快速切换。缺点——占用内存大。 2、frame.context: 缺点——不可以支持页面快速切换。优点——占用内存小。 ...
  • 今天项目中出现一个用iframe嵌套帆软报表页面出现Refused to display in a frame because it set ‘X-Frame-Options’ to ‘SAMEORIGIN’ 于是就记录下来。 百度了很久,大致分为 X-Frame-Options是什么? X-Frame-...
  • Chromium网页Frame Tree创建过程分析

    万次阅读 热门讨论 2016-01-11 00:59:55
    Chromium在加载一个网页之前,需要在Browser进程创建一个Frame Tree。Browser进程为网页创建了Frame Tree之后,再请求Render进程加载其内容。Frame Tree将网页抽象为Render Frame。Render Frame是为实现Out-of-...
  • 又是一个容易被新手忽略的小问题。 当我们使用rviz时,比如运行雷达后...For frame [laser]: Fixed Frame [map] does not exist 看Global Options 当中的Fixed Frame ,是map。这是因为世界坐标定义成map,单独运行...
  • HTML的frame标签

    千次阅读 2018-07-30 11:40:45
    frame&gt; 标签 - HTML5 不支持   实例 简单的三框架页面: &lt;frameset cols="25%,50%,25%"&gt; &lt;frame src="frame_a.htm"&gt; &lt;frame src="...
  • R语言frame操作

    千次阅读 2018-08-30 21:19:56
    1.为什么要介绍frame? 之所以介绍frame,是因为frame就是sql中的表,数据分析其实都是围绕着表来的。 2.frame有哪些操作 既然围绕着表来操作,那么想想sql中怎么玩的,都有哪些函数 ①创建frame emp.data &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 745,637
精华内容 298,254
关键字:

frame