0

我似乎无法显示来自我的自定义 .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();

我想在我的浏览器上显示“contentNeeded”。

4

1 回答 1

1

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

page.open调用是异步的(谁知道打开该 url 将花费多少时间),因此phantom.exit()在浏览器仅开始打开该 url 之后立即运行。而是在获取信息后退出 PhantomJS,在回调中:

if (status === "success") {

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

    console.log(contentNeeded);
    phantom.exit();
}
于 2018-05-28T07:16:11.457 回答