可以使用Zombie.js / Phantom.js通过window.open获取新打开的窗口的HTML吗?

时间:2014-10-15 09:07:17

标签: javascript web-scraping phantomjs zombie.js

我试图在激活zombie.js使用javascript的链接后获取新打开窗口的html。

这是html代码

<html>
<head>
    <script type="text/javascript">
        function newin(id)
        {
            var url="page.php?id="+id;
            window.open(url,id,"toolbar=no,location=top,directories=no,status=no,scrollbars=yes,hscroll=no,resizable=yes,copyhistory=no,width=1025,height=1250");
        }
    </script>
</head>

<body>
    <div>
        <a href="javascript:newin(123)">123</a><br/>
        <a href="javascript:newin(234)">234</a><br/>
        <a href="javascript:newin(345)">345</a><br/>
    </div>
</body>

我使用的脚本是:

var Browser = require("zombie");
var browser = new Browser();
browser.visit("http://localhost:8000/testpage.html", function () {
    browser.wait(function(){
        var selector = "a[href*='newin']";
        var elements = browser.queryAll(selector);
        for (var e=0;e<elements.length;e++){
            browser.clickLink(elements[e],function(){
                browser.wait(function(){
                    console.log(browser.html());
                });
             });
         }
    });
});

我无法获取任何窗口的HTML。任何想法此代码中有什么问题?或者这可能与phantomjs ??

1 个答案:

答案 0 :(得分:0)

最后我才知道,如果链接在href或动作中直接包含JavaScript,Zombie似乎明白,打开像普通超链接一样的新页面会。虽然JavaScript仍然正确执行,但由于Zombie尝试将无效目标加载为新页面而导致DOM丢失。

有问题的链接就是例如。

<a href="javascript:void(0)">test</a>

不支持javascript:链接,它仍然是一个悬而未决的问题:

https://github.com/assaf/zombie/issues/700