如何显示自定义phantomjs脚本的响应

时间:2018-05-27 20:27:34

标签: laravel phantomjs php-phantomjs

我似乎无法显示自定义.proc文件的响应。我在ubuntu上的laravel 5.6上运行php-phantomjs。我有一个URL端点我用来调用自定义文件,如下所示:

public function getLinks()
{
    $location = base_path('phantom-scripts');


    $serviceContainer = ServiceContainer::getInstance();

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

    $client = Client::getInstance();
    $client->getEngine()->setPath(\Config::get('phantomPath'));
    $client->setProcedure('my_procedure');
    $client->getProcedureLoader()->addLoader($procedureLoader);

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

    $client->send($request, $response);
    dd($response->getContent());
  }

这里是.proc文件

var page = require('webpage').create();
var fs = require('fs');

console.log("loading...");



var url = 'http://www.example.com';

page.open(url, function (status) {

    if (status === "success") {

        var contentNeeded = page.evaluate(function () {
            return document.querySelector("h1").outerHTML;
        });


        console.log(contentNeeded);

    }


});


phantom.exit();

我想显示内容需要'在我的浏览器上。

1 个答案:

答案 0 :(得分:1)

PhantomJS在您的脚本中退出太早。

page.open次调用是异步的(谁知道打开该网址需要多长时间),因此phantom.exit()会在浏览器开始打开该网址后立即运行。在回调中获取信息后退出PhantomJS:

if (status === "success") {

    var contentNeeded = page.evaluate(function () {
        return document.querySelector("h1").outerHTML;
    });

    console.log(contentNeeded);
    phantom.exit();
}