【问题标题】:PhantomJS doesn't render full page contentPhantomJS 不呈现整页内容
【发布时间】:2017-05-22 18:26:41
【问题描述】:

我是PhantomJS 的新手,正在使用最基本的代码:获取谷歌页面并捕获屏幕截图。

我要获取的 URL 是:https://www.google.com/#tbm=lcl&q=starbucks

如果你在真正的浏览器中打开它,你会看到它是这样的:

但我的 PhantomJS 看到了这个:

一开始我觉得可能是异步网页内容加载太慢了,所以我设法等了好几秒然后抓屏,但我看到 PhantomJS 仍然无法获取内容。

这是我的代码 sn-p:

var page = require('webpage').create();
page.settings.userAgent = 'Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36';
page.viewportSize = { width: 1280, height: 800 };

page.open('https://www.google.com/#tbm=lcl&q=starbucks', function() {

  setTimeout(function(){
    page.render('screenshot_failed.png');
    phantom.exit();
  }, 5000);
});

请指出我在获取此网页时可能会错过的内容。谢谢!

【问题讨论】:

  • 您是否尝试设置视口大小? page.viewportSize = { width: 480, height: 800 };
  • 嗨@quirimmo 感谢您的评论。是的,我尝试将其设置为 1280x800,但没有帮助。 (我将更新问题以反映这一变化。)
  • 哦,很奇怪,你能不能试试另一种解决方案?将其发布为答案,但如果没有帮助,我将删除它。在这里写或粘贴代码太糟糕了-.-

标签: javascript phantomjs automated-tests rendering headless-browser


【解决方案1】:

除了你已经拥有的所有代码之外,尝试在打开回调中强制页面到你想要的大小:

var width = 1280;
var height = 800;
var webpage = require('webpage');

page.open('https://www.google.com/#tbm=lcl&q=starbucks', function(status) {
    page.evaluate(function(w, h) {
      document.body.style.width = w + "px";
      document.body.style.height = h + "px";
    }, width, height);
    page.clipRect = {top: 0, left: 0, width: width, height: height};                                                                                                                           
    page.render('screenshot_failed.png');
});

【讨论】:

  • 谢谢,但还是不行……我得到了完全一样的截图,没有内容……
  • 哦,您正在尝试获取屏幕截图。所以请让我们试试我在答案中更改的代码
  • 完成,请调整此代码以匹配您的代码
猜你喜欢
  • 2016-02-14
  • 1970-01-01
  • 2017-04-19
  • 2013-06-06
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2012-04-21
  • 2021-12-16
相关资源
最近更新 更多