javascript - 使用 phantom js 从 jsfiddle 截屏

标签 javascript node.js phantomjs jsfiddle

我必须从 jsfiddle.net 捕获生成的图表的屏幕截图以向其他人展示。我正在使用 phantomjs 来达到这个目的。现在这是我正在使用的代码

page.open(modifiedUrl.url, function() {
            setTimeout(function(){
                  //http://fiddle.jshell.net/fusioncharts/B2t38/show/light/
                  console.log("created " + modifiedUrl.unique_str+".png");
                  page.render(modifiedUrl.unique_str+".png");
                  counter+=1;
                  startRender();    
            }, 30000);

        });

网址在注释行中给出。现在发生的事情是我总是用滚动条得到 trim 后的图像。但当我直接点击网址时,没有滚动条的迹象。有没有办法获得滚动条免费的未 trim 图像。我尝试过使用 View 端口设置功能,但该功能不起作用,我也尝试使用 ClipRect 属性,但它也不起作用。

最佳答案

PhantomJS 的默认视口(viewport)大小为 400x300。对于大多数使用固定宽度的网站来说,这太小了,这就是为什么会出现滚动条,这就是为什么在使用 Selenium Webdrivers 元素时无法与之交互,因为它们隐藏在 View 之外。
对于其他网站,将显示移动网站(可能基于媒体查询)。

要解决此问题,您应该在打开页面之前将视口(viewport)设置为类似于桌面的内容:

page.viewportSize = { width: 1280, height: 800 };

(或更高,具体取决于您的要求)

<小时/>

您可以通过在交互模式下运行不带任何参数的 phantomjs 并检索 viewportSize 来检查这一点。

$ phantomjs
phantomjs> var page = require('webpage').create();
undefined
phantomjs> page.viewportSize
{
   "height": 300,
   "width": 400
}

关于javascript - 使用 phantom js 从 jsfiddle 截屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27147980/

相关文章:

javascript - Jquery 用户界面。可在元素后放置

javascript - 尝试在 DOM 上添加的元素上调用插件时,jQuery 无限递归

node.js - nodejs 代理没有响应

node.js - 检测文件系统的 mtime 分辨率

.net - 如何使用 WebDriver 在 PhantomJS 中处理/接受 JS 警报?

javascript - 如何在没有特定子元素的情况下获取div中的内容

javascript - 对 JavaScript 函数进行非正则表达式重构的最快方法

node.js - Mocha --require 等到迁移

selenium - 当 phantomjs 在与 selenium hub 不同的机器上运行时连接被拒绝

javascript - .NET Core Web API 路由和 GET 请求