如何在PhantomJS中滚动以触发延迟加载?

时间:2015-08-12 11:23:32

标签: javascript scroll phantomjs

我在使用PhantomJS滚动时触发延迟加载时遇到问题。之前的答案(甚至是已接受的答案)都不适合我。大多数是旧的PhantomJS版本。

其他问题 - 与我的情况几乎相同或类似但没有或没有答案的答案:

所有人都尝试将window.document.body.scrollTop = document.body.scrollHeightpage.evaluate()一起使用,或者即使他们尝试使用正确的page.scrollPosition然后由于某种原因他们使用一些明确收集的硬编码滚动值,或限制他们的滚动显示滚动可用时应在页面上的某些元素。

1 个答案:

答案 0 :(得分:7)

PS :在呈现网页之前 - 请使用page.scrollPosition = { top: 0, lefT: 0};,否则您只会看到呈现页面的底部。

var vWidth = 1080;
var vHeight = 1920; 
page.viewportSize = {
    width: vWidth ,
    height: vHeight 
};

//Scroll throu!
var s = 0;
var sBase = page.evaluate(function () { return document.body.scrollHeight; });
page.scrollPosition = {
    top: sBase,
    left: 0
};

function sc() {
    var sBase2 = page.evaluate(function () { return document.body.scrollHeight; });
    if (sBase2 != sBase) {
        sBase = sBase2;
    }
    if (s> sBase) {
        page.viewportSize = {width: vWidth, height: vHeight};
        return;
    }
    page.scrollPosition = {
        top: s,
        left: 0
    };
    page.viewportSize = {width: vWidth, height: s};
    s += Math.min(sBase/20,400);
    setTimeout(sc, 110);
}
sc();
  • 首先我们设置s和sBase(当前滚动偏移和最大滚动偏移)。
  • 然后我们用幻像滚动页面到最后。

  • 我们定义滚动功能 - 每隔110 ms以pageHeight / 20或400(值较低)的步长从0滚动到底部(sBase)。 **此功能也可以处理无限滚动 - 如果稍微调整一下。但是我给你的基本用法应该在页面加载太慢时停止; P

  • 我们还更改了视口 - 但仍然没有使用裸滚动触发某些lazyload脚本。