簡體   English   中英

CasperJS屏幕截圖顯示空白

[英]CasperJS screenshot gives a blank screen

我一直在用這個敲打我的頭。

我正在使用phantomjs 1.9.8在casperjs 1.1.0-beta3上運行

我正在嘗試從url捕獲圖像並將其保存為文件。

這是我的命令:

casperjs --proxy-type=none --ssl-protocol=any /home/casper-capture.js http://url.com/demo/demo /home/demoScreenshot.png

這是我的casper-capture.js

/**
* capture image from url and save it to file.
**/
var casper = require('casper').create({
    verbose: true,
    logLevel: "debug",
     viewportSize: {
        width: 2300,
        height: 1200
    },
    pageSettings: {
        webSecurityEnabled: false,
        loadImages:  true,        // The WebPage instance used by Casper will
        loadPlugins: true         // use these settings
    }
});
// delay before image capturing
var delay = 60000;
//timeout delay for loading
var timeoutForLoading = 10 * 60000;
// image source url.
var url = casper.cli.args[0];
// image output path
var path = casper.cli.args[1];

casper.start().zoom(4).thenOpen(url, function urlCaptureClouser() {
    this.wait(delay, function(){
        casper.waitFor(function check() {
            return this.evaluate(function() {
                return document.querySelectorAll('.fa-spin').length +
                        document.querySelectorAll('.chart-loading').length == 0;
            });
        }, function then() {
           this.capture(path);
        }, function then() {
            this.capture(path);
        }, timeoutForLoading);
    });
});

casper.run();

我得到一個“空白”屏幕。 :-(

當我在本地系統上運行它時。 有用! 我不確定自己在做什么錯。

有人可以指出我的問題嗎?

控制台日志(帶有錯誤日志記錄):

[info] [phantom] Starting...
[info] [phantom] Running suite: 2 steps
[debug] [phantom] opening url: <URL>, HTTP GET
[debug] [phantom] Navigation requested: url=<URL>, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "<URL>"
Error: TypeError: 'undefined' is not an object (evaluating 'Object.assign.apply')
[debug] [phantom] Successfully injected Casper client-side utilities
[info] [phantom] Step urlCaptureClouser 2/2 <URL> (HTTP 200)
[info] [phantom] Step urlCaptureClouser 2/2: done in 329ms.
[info] [phantom] Step _step 3/3 <URL> (HTTP 200)
[info] [phantom] Step _step 3/3: done in 351ms.
[info] [phantom] wait() finished waiting for 60000ms.
[info] [phantom] Step _step 4/4 <URL> (HTTP 200)
[info] [phantom] Step _step 4/4: done in 60358ms.
[info] [phantom] waitFor() finished in 41ms.
[info] [phantom] Step then 5/5 <URL> (HTTP 200)
[debug] [phantom] Capturing page to /home/dmeo1991.png
[info] [phantom] Capture saved to /home/dmeo1991.png
[info] [phantom] Step then 5/5: done in 60674ms.
[info] [phantom] Done 5 steps in 60674ms
Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///usr/lib/node_modules/casperjs/bin/bootstrap.js. Domains, protocols and ports must match.

您的日志顯示“錯誤:TypeError:'未定義'不是對象(正在評估'Object.assign.apply')”,這可能是空白屏幕的原因,因為實際上未執行任何JavaScript。

您需要升級到PhantomJS 2.x (PhantomJS 1.x背后的引擎已經使用了5年以上)或添加了polyfill。 我已經從MDN復制了polyfill:

casper.on('page.initialized', function(){
    this.evaluate(function(){
        // Polyfill...
        if (typeof Object.assign != 'function') {
          Object.assign = function(target) {
            'use strict';
            if (target == null) {
              throw new TypeError('Cannot convert undefined or null to object');
            }

            target = Object(target);
            for (var index = 1; index < arguments.length; index++) {
              var source = arguments[index];
              if (source != null) {
                for (var key in source) {
                  if (Object.prototype.hasOwnProperty.call(source, key)) {
                    target[key] = source[key];
                  }
                }
              }
            }
            return target;
          };
        }
    });
});

casper.start(...)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM