2017-03-03 3 views
1

Ich lerne PhantomJS und PHP-PhantomJS. Ich möchte ein Skript an PhantomJS übergeben.Korrekte Möglichkeit, Skript an PhantomJS über PHP-PhantomJS zu übergeben?

Derzeit versuche ich dies:

$client->getEngine()->addOption('/Applications/myWebApp/js/phantomtest.js'); 
    $request = $client->getMessageFactory()->createRequest('http://www.jonnyw.me/', 'GET'); 

    $response = $client->getMessageFactory()->createResponse(); 
    $client->send($request, $response); 
    if ($response->getStatus() === 200) { 
     echo $response->getContent(); 
    } 

Ich bin ein leeres $response Objekt zurück nach dem Aufruf von $client->send($request, $response) bekommen.

Here's the contents of my test script ('phantomtest.js'): 

var page = require('webpage').create(); 
page.open('http://www.jonnyw.me', function(status) { 
    console.log("Status: " + status); 
    if(status === "success") { 
    page.render('example.png'); 
    } 
    phantom.exit(); 
}); 
+0

Sieht interessant aus, aber ich würde eher Backticks verwenden – pguardiario

+0

@pguardiario, was ist der richtige Weg, um Backticks dafür zu verwenden? – VikR

+0

'' Oder [exec] (http://php.net/manual/en/function.exec.php) – Vaviloff

Antwort

1

Ich denke, dies ist die entsprechende Seite in der Dokumentation sein muss: http://jonnnnyw.github.io/php-phantomjs/4.0/4-custom-scripts/

Hier ist Code, der funktioniert:

In PHP:

$location = '/Applications/myWebApp/js/'; 
    $serviceContainer = ServiceContainer::getInstance(); 

    $procedureLoader = $serviceContainer->get('procedure_loader_factory') 
      ->createProcedureLoader($location); 
    $client->getProcedureLoader()->addLoader($procedureLoader); 

    $request = $client->getMessageFactory()->createRequest(); 
    $client->setProcedure('phantomJStest'); 

    $response = $client->getMessageFactory()->createResponse(); 

    $client->send($request, $response); 

    if (($response->getStatus() === 200) || ($response->getStatus() == 'success')){ 
     // Dump the requested page content 
     echo $response->getContent(); 
    } 

In der proc-Datei phantomJStest.proc :

phantom.onError = function (msg, trace) { 
    console.log(JSON.stringify({ 
     "status": msg 
    })); 
    phantom.exit(1); 
}; 

var system = require('system'); 
var uri = "http://www.jonnyw.me"; 

var page = require('webpage').create(); 
page.open(uri, function (status) { 
    console.log(JSON.stringify({ 
     "status": status 
    })); 

    if (status === "success") { 
     page.render('example.png'); 
    } 
    phantom.exit(1); 
}); 
+0

Bitte fügen Sie Informationen aus dem Link zu Ihrer Antwort (falls diese Seite später ist) – Vaviloff

+0

@Vaviloff es ist eine ganze Seite von Informationen. Zu viel, um hier zu posten? – VikR

+0

Natürlich nicht, fügen Sie einfach das Codebeispiel ein, um ein benutzerdefiniertes Skript aus dieser Bibliothek auszuführen. Es muss einen Weg geben, richtig? – Vaviloff

Verwandte Themen