【发布时间】:2015-12-01 20:32:20
【问题描述】:
我正在使用 PhantomJS 来捕获网页。该页面具有来自 google fonts API 的字体。当我渲染页面时,字体不会被渲染并返回默认值。
PhantomJS 版本:2.0
平台:Windows
我添加了我使用的代码:
var page = require('webpage').create();
var args = require('system').args;
var isLoad = false;
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';
page.viewportSize = { width: 1400, height: 569.1588 };
page.open('http://www.facegift.co.il/canvas/print.aspx?userItemId=27477&Sc=974088&pagenum=3&width=1500&print=2', function (status) {
setTimeout(function () {
var ue = page.evaluate(function () {
return window.navigator.appVersion;
});
console.log("status: " + status);
console.log("ue: " + ue);
if (status === "success") {
var timer = setInterval(function () {
var ps = page.evaluate(function () {
document.body.bgColor = 'white';
return document.getElementById("pageStatus").innerHTML;
});
if (!isLoad) {
console.log("wait...");
if (ps == "loaded") {
clearInterval(timer);
console.log("proccessing...");
console.log("loaded");
isLoad = true;
page.render('new/exam1.png');
phantom.exit();
}
}
}, 10);
} else {
console.log('Unable to load the address!');
phantom.exit(1);
}
}, 1500);
});
【问题讨论】:
-
尝试过等待字体加载完毕?
-
是的,超过 10 秒。但不好
-
您的代码相当复杂。您是否尝试过逐个减少它,直到问题不再出现?此外,即使您有 1.5 秒的初始延迟,您以后的检查(如果页面需要更长的时间来加载)也是每秒 100 次,并在页面加载后立即拍摄图像(这不会给字体时间)。您最好等待页面完全加载 - 等待字体加载有多种技巧。此外,您应该考虑 innerHTML 永远不会“加载”的情况,即您应该有一个最大超时时间。
-
好的,我这样做了,我发现设置 usetAgent 是问题,但是当我不设置它时,我又回到了它不旋转的其他问题。
标签: javascript fonts phantomjs google-font-api