Erstellen Sie zuverlässige Screenshots von Websites? Phantomjs und Casperjs geben auf einigen Websites leere Screenshots zurück.

ffnen Sie eine Webseite und machen Sie einen Screensho

NUR mit Phantomjs: (Dies ist ein einfaches Skript. Tatsächlich ist es das in den Dokumenten verwendete Beispielskript.http: //phantomjs.org/screen-capture.htm

var page = require('webpage').create();
page.open('http://github.com/', function() {
  page.render('github.png');
  phantom.exit();
});

Problem ist, dass für einige Websites (wie Github) witzig genug sind, Phantombilder zu erkennen und nicht zu bedienen und nichts gerendert wird. Ergebnis istgithub.png ist eine leere weiße PNG-Datei.

Ersetzen Sie Github mit "google.com" und Sie erhalten einen schönen (richtigen) Screenshot, wie beabsichtigt.

Als erstes dachte ich, dass dies ein Phantomjs-Problem ist, habe ich versucht, es mit Casperjs auszuführen:

casper.start('http://www.github.com/', function() {
    this.captureSelector('github.png', 'body');
});

casper.run();

Aber ich bekomme das gleiche Verhalten wie bei Phantomjs.

So dachte ich ok das ist höchstwahrscheinlich ein User Agent Problem. Wie in: Github schnüffelt Phantomjs und beschließt, die Seite nicht anzuzeigen. Also habe ich den User Agent wie folgt eingestelltaber das hat immer noch nicht funktioniert.

var page = require('webpage').create();
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36';
page.open('http://github.com/', function() {
  page.render('github.png');
  phantom.exit();
});

So habe ich dann versucht, die Seite zu analysieren und anscheinend scheinen einige Sites (wieder wie Github) nichts über das Kabel zu senden.

Mit casperjs habe ich versucht, den Titel auszudrucken. Und für google.com bekam ich zurückGoogle aber für github.com habe ich wieder bupkis bekommen. Beispielcode:

var casper = require('casper').create();

casper.start('http://github.com/', function() {
    this.echo(this.getTitle());
});

casper.run();  

Das Gleiche wie oben führt auch bei reinen Phantomen zum gleichen Ergebnis.

Aktualisieren

Könnte dies ein Zeitproblem sein? Ist Github nur super langsam? Ich bezweifle es aber lass es trotzdem testen ..

var page = require('webpage').create();
page.open('http://github.com', function (status) {
    /* irrelevant */
   window.setTimeout(function () {
            page.render('github.png');
            phantom.exit();
        }, 3000);
});

Und das Ergebnis ist immer noch bupkis. Also nein, es ist kein Timing-Problem.

Wie sind einige Sites wie Github, die Phantome blockieren?Wie können wir zuverlässig Screenshots von ALLEN Webseiten machen? Muss schnell und kopflos sein.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage