PhantomJS命令iframe

时间:2015-12-27 14:40:09

标签: iframe phantomjs

如何在页面上获取iframe?我想获得一个外部选项(宽度,高度,id,src)和内部HTML。

只有当页面上的iframe没有动态添加时,我才能得到所有内容。如果它们是动态添加的,那么DOM和frameid(switchToFrame(frameid))中IFRAME的顺序会有所不同,我无法比较它们。

HTML

<iframe src="iframe.php?id=1"></iframe>
<iframe src="iframe.php?id=2"></iframe>
<div id="dynamic_iframe"></div>
<div id="dynamic_iframe2"></div>
<iframe src="iframe.php?id=3"></iframe>

<script>
    var el = document.createElement("iframe");
    el.src = 'iframe.php?id=21';
    document.getElementById('dynamic_iframe').appendChild(el);

    var el = document.createElement("iframe");
    el.src = 'iframe.php?id=22';
    document.getElementById('dynamic_iframe2').appendChild(el);
</script>

PhantomJS

getAllIFramesFromPage = function(page){
return page.evaluate(function() {
        var matches = document.querySelectorAll('iframe');
        ifames = [];
        for(var i = 0; i < matches.length; ++i){
            ifames.push(matches[i].src);
        }
        return ifames;
    });        
};

iframe.php?id=1
iframe.php?id=2
iframe.php?id=21
iframe.php?id=22
iframe.php?id=3

PhantomJS

var cnt = page.framesCount;
for(var i = 0; i < cnt; i++){
    page.switchToFrame(i);
    console.log(page.framePlainText);
    page.switchToMainFrame();
}

1
2
3
21
22

1 个答案:

答案 0 :(得分:1)

我能够摆脱这样的问题: 当我将所有iframe传递给DOM时,我将其隐藏值

used

在iframe中我已经可以获得如下值:

page.switchToMainFrame();
page.evaluate(function() {
    var matches = document.querySelectorAll('iframe');
    ifames = [];
    for(var i = 0; i < matches.length; ++i){
        var iframeWindow = matches[i].contentWindow || matches[i].contentDocument.parent;
        var frmBody = iframeWindow.document.getElementsByTagName("body")[0].frame_id = i;
    }
});