PhantomJS Absturz


#1

Moin, das passt eigentlich auch in den Frust-Thread: Zuerst hatte ich Python installiert (dachte, bequem), dann Splinter und dann ChromeDriver server for win - dann hab ich das zusammengesteckt - und dann ist mir aufgefallen, dass das ohne Chrome nicht funktioniert.

Also hab ich mir PhantomJS angeschaut, das kann JS, CSS, Canvas und sogar Rendern. Allerdings scheine ich die Funktionsweise noch nicht verstanden zu habn:

JavaScript:

console.log('Hello, world!');
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
console.log('The new user agent is ' + page.settings.userAgent);
page.open('https://forum.byte-welt.net/', function() {
    page.render('b-w.png');
    var as = page.evaluate(function() {
        return document.querySelectorAll('a');
    });
    var refs = [];
    for (var i = 0; i < as.length; i++) {
        var e = as[i];
        if (e.hasAttribute('href')) {
            refs.push(e.href);
            console.log(e.href);
        }
    }
    phantom.exit();
});

Er gibt aus:
Hello world,
default agent,
new agent,
und er rendert auch das PNG b-w.png.
Das war’s dann aber auch schon:

Fatal Windows exception, code 0xc0000005.
PhantomJS has crashed. Please read the bug reporting guide at

Dh, er kann die Seite “öffnen” und auch komplett rendern, aber kann nicht ein paar Knoten des DOMs auswählen… Man kann wohl auch jQuery injizieren ( siehe Link ), aber das scheint auch nicht zu funktionieren.

Sieht jemand, was ich falsch mache? Oder hättet ihr viell Tipps und Alternativen ( hier hab ich mich schon durchgewühlt )? Die Sprache ist auch egal, ich kann alle, bis auf Go. :face_with_raised_eyebrow:


#2

#3

Ich hatte doch schon geschrieben, dass das Rendern funktioniert…


#4

Dem von mir verlinkten Beitrag nach, ist das Zufall.

Die Lösung(en) für diesen Fehler stehen in dem verlinkten Beitrag.


#5

Hab auch etwas dazu gefunden:

http://tobyho.com/2015/01/09/headless-browser-testing-xvfb/


#6

Hab es inzwischen hinbekommen. Nur PhantomJS war auch das falsche Werkzeug… Inzwischen läuft es auch auf dem PI…

apt-get install xvfb
apt-get install iceweasel

xvfb-run java -jar ...

xvfb öffnet java, öffnet jar, öffnet selenium, öffnet webdriver, öffnet firefox, verbindet sich mit firefox auf localhost (hoffe, die Reihenfolge stimmt so).

Man muss aber beachten, dass iceweasel im Moment Version 52 ist, Firefox aber mittlerweile 56… Dh, der passige webdriver wird benötigt ( bei mir ist das selenium-server-standalone-2.53.0.jar ).

Der Vorteil ist ganz klar… dass es nicht nur ein fake browser (mit gecko) ist, nein, das ist real!

phantom ganz schön, aber nicht, für was ich damit möchte. :slight_smile: Thema done.


#7

Problem mit Selenium: Cookies sollen gespeichert werden. Dann nutzt man am besten ein Firefox Profile. Das hab ich auch vorher mit Namen AUser erstellt.

        ProfilesIni profilesIni = new ProfilesIni();
        FirefoxProfile profile = profilesIni.getProfile("AUser");
        DesiredCapabilities capa = DesiredCapabilities.firefox();
        capa.setCapability(FirefoxDriver.PROFILE, profile);
        FirefoxOptions firefoxOptions = new FirefoxOptions(capa);
        wd = new FirefoxDriver(firefoxOptions);
//...
        System.out.println(profile.layoutOnDisk());
        wd.quit();

Problem 1: Ich “muss” eine ältere Version von selenium-server-standalone nutzen (2.53.0),
Problem 2: new FirefoxDriver(FirefoxProfile) gibt’s in dieser Version noch nicht,
Problem 3: ich nutze die neuste OnlineDoku + Netbeans,
Problem 4: new FirefoxDriver(Capabilities) ist nach der neusten Doku Deprecated, ich weiß aber nicht, ob es für 2.53.0 auch Deprecated ist,
Problem 5: System.out.println(profile.layoutOnDisk()) sagt, es wird temporär gespeichert,
(Problem 6: er nutzt nicht das Profile mit Namen AUser,)
Problem 7: Cookies werden nicht gespeichert.

Hat da einer Idee? Eigentlich ist das ein Zweizeiler. :frowning: