网站首页 > 知识剖析 正文
一. 问题描述
骚年,当你捋一遍文档,写几个小例子,觉得Phantomjs在手,天下我有的时候,也许某一次不经意的点击,发现,哎呦,选择器竟然选不中元素!!!再仔细检查,发现我用的是CSS3的选择器呀,XPath也试过,结果还是发出的API调用有如石沉大海,这怎么破?
二. 问题原因及出现场景
以上问题很大程度上是由于:你要大显身手的页面上存在iframe!导致你在文档主体无法选中iframe中的元素标签。
iframe是什么鬼?简而言之,就是文档中的文档,提供了一个简单的方式把一个网站的内容嵌入到另一个网站中。最常见的使用场景就是广告投放。因为iframe的创建比其它包括scripts和css的 DOM 元素的创建慢了 1-2 个数量级,所以一般情况下,我们很少使用它。但害人之心不可有,防人之心不可无呀!
三. 使用场景
一些网站做模拟登陆操作的时候,登录窗口往往是嵌入在iframe之中的,这个时候使用者直接调用API来填充和提交表格,往往得不到期望登陆成功的效果。
四. 背景函数介绍
为了解决这个问题,需要了解三个函数,介绍如下:
childFramesName:列出当前页面上的活动的iframe名称,这个函数有时可以帮助你确定下一个函数switchToChildFrame的参数,所以还是比较重要的
switchToChildFrame:这个就是解决该问题的核心,它的作用是把进程的执行切换到了你指定的iframe,参数分为两种,一种是iframe的name,也就是<iframe>标签中的id属性,当然并不是每一个iframe标签都会有id属性,所以更通用的是第二种index,这个参数的确定就需要使用者根据childFramesName函数的结果和选择器上下文来推断了,记得下标是从0开始的哦。
switchToParentFrame:别高兴得太早,所谓有借有还再借不难,在子iframe中爽了一把之后,如果还需要和主DOM文档进行交互的话,一定不要忘记调用这个函数,一定不要忘记调用这个函数,一定不要忘记调用这个函数。
五. 解决办法
var webPage = require('webpage');
var page = webPage.create();
//page.childFramesName();
//page.switchToChildFrame(name | index);
//do some staff
//page.switchToParentFrame();
猜你喜欢
- 2025-06-13 热血动漫番太好看了!用Python爬取了1T的动漫,内存都爆了
- 2025-06-13 前端实用技术分享—用Vue实现打印指定区域
- 2025-06-13 JSONP安全攻防技术(web安全攻防)
- 2025-06-13 七爪源码:在 Anvil 应用程序中嵌入网页的 3 个简单步骤
- 2025-06-13 IDM、Portal 、ESB如何与钉钉进行集成
- 2025-06-13 layui中弹出层的保存按钮绑定为iframe中表单的按钮
- 2025-06-13 填坑:frame和iframe 你所不知道的!
- 2025-06-13 页面渲染优化的几点建议(页面渲染的顺序)
- 2025-06-13 让我们来看看常见的网页挂马方式(网站挂马一般在什么位置)
- 2025-06-13 【Python大语言模型系列】使用dify云版本开发一个智能客服机器人
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)