9

我正在使用 PhantomJS 从任意 URL 创建屏幕截图。在截取屏幕截图之前,我想操作页面 DOM 以删除所有下拉菜单,因为 PhantomJS 将它们错误地呈现在页面的左上角(一个已知的 Phantom问题。)

我有一个简单的 DOM 脚本来执行此操作:

    var selects = document.getElementsByTagName('select');

    for (var i=0; i < selects.length; i++) {
        document.getElementsByTagName('select')[i].style.visibility="hidden";
    }

这已经过测试并且可以作为独立的 Javascript 正常工作。但是,它在我用来收集屏幕截图的 PhantomJS 代码中不起作用(显示的最后一部分):

  page.open(address, function (status) {

    if (status !== 'success') {
        console.log('Unable to load the address!');
    } else {
        window.setTimeout(function () {

            var selects = document.getElementsByTagName('select');

            for (var i=0; i < selects.length; i++) {
                document.getElementsByTagName('select')[i].style.visibility="hidden";
            }

            page.render(output);

            phantom.exit();

        }, 200);
    }
});

某些页面仍然在错误的位置呈现选择框。我很感激帮助解决原始 PhantomJS 渲染错误或隐藏 DOM 中的下拉菜单。谢谢。

4

2 回答 2

11

在正确的上下文中运行它,即在带有page.evaluate. PhantomJS 包含许多示例来证明这一点,例如useragent.js

于 2012-09-01T04:30:09.267 回答
2

这段代码不起作用?我在 for 循环中使用了缓存的选择变量,而不是从 DOM 中重新选择元素来提高性能。

var selects = document.getElementsByTagName('select'); 
for (var i=0; i < selects.length; i++) { 
   selects[i].style.visibility="hidden"; 
}
于 2012-08-31T17:44:02.537 回答