【发布时间】:2016-01-05 13:40:58
【问题描述】:
我正在尝试将网站的特定 div 捕获到屏幕截图中,以方便我必须做的一些繁重的工作。到目前为止,我正在使用我在这个完全相同的网站上找到的这段代码,它正在有点工作:
var page = require('webpage').create();
page.open('http://www.example.org', function() {
// being the actual size of the headless browser
page.viewportSize = { width: 1440, height: 900 };
var clipRect = page.evaluate(function(){
return document.querySelector("div.example").getBoundingClientRect();
});
page.clipRect = {
top: clipRect.top,
left: clipRect.left,
width: clipRect.width,
height: clipRect.height
};
page.render('google.png');
phantom.exit();
});
这确实有效,但我有两个问题:
1) 页面在第一次访问时有一个叠加层,一种出现在屏幕截图上的弹出式窗口。 2)图像显然是下载的,因为它们需要渲染(它们只在网页上滚动时出现)
所以最后我得到了这样的结果: problem
我没有使用 phantomjs 的经验,所以我不知道如何解决这个问题。消除覆盖 DIV 并以某种方式在截屏之前强制加载图像可能会起作用,但我不知道如何实际编码。
非常感谢!
【问题讨论】:
-
您是否可以控制要抓取的网站?即代码...
-
我认为有两种方法可以解决这个问题。如果您可以控制目标网站代码,那么您可以将回调放在与 phantomjs 对话的 javascript 中。如果您无法控制,那么最好使用超时来等待页面完成加载所有内容......
-
打开 wep 页面,获取特定的覆盖容器并将 css 更改为
display:none,然后将页面呈现为图像。您也可以通过更改滚动位置来向下滚动。检查链接http://phantomjs.org/api/webpage/property/scroll-position.html -
没有控制,知道如何实现滚动吗?这是唯一剩下的东西,感谢您的帮助!
标签: javascript phantomjs