如何从PHP中的phantomJS获取数据

时间:2016-03-08 15:57:37

标签: php phantomjs php-phantomjs

我有一个自定义的phantomJS程序,我用PhantomJS PHP Library打电话。在他的程序中,我想加载内容并提取渲染页面的一些信息。

从命令行调用过程并记录"找到的信息" exectration工作正常。到控制台。但是现在我想在我的php脚本中获取这些信息以便进一步处理。

如何将过程中的信息返回到调用php脚本?

PHP

$location = '/var/www/vhosts/boos/procs';

$serviceContainer = ServiceContainer::getInstance();

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

$client = Client::getInstance();
$client->getEngine()->setPath('/usr/local/share/phantomjs/bin/phantomjs');
$client->getEngine()->addOption('--web-security=false');
$client->setProcedure('extractor');
$client->getProcedureLoader()->addLoader($procedureLoader);

$request  = $client->getMessageFactory()->createRequest();
$request->setUrl('http://website.de');

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

$client->send($request, $response);
// GIVE ME THE RESPONSE HERE

程序

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

// settings
page.settings.loadImages = false;
page.settings.localToRemoteUrlAccessEnabled = true;
page.settings.webSecurityEnabled = false;
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 FirePHP/4Chrome';
page.viewportSize = {
  width: 1440,
  height: 900
};

t = Date.now();

page.open('{{ input.getUrl() }}', function(status) {
  if (status == 'success') {
        // Evaluate page
        var links = page.evaluate(function() {
            // GET ALL LINKS FROM DOM 
        }

        // RETURN THE LINKS TO THE PHP SCRIPT

        phantom.exit();

  }
});

2 个答案:

答案 0 :(得分:0)

我说这是对图书馆的极端使用,目的只是

  

通过PhantomJS无头浏览器加载页面并返回页面响应。

模板设计为设置参数,同时您尝试在那里实现某些逻辑。

如果你真的需要这样做,你可以使用未记录的response对象。分配给response(js过程)的属性将在$response后的$client->send($request, $response);(php)中提供:

// procedure js:
response.test = 18;

// php:
echo $response->get('test'); // prints 18

了解它在默认模板中的使用方式,例如: here

答案 1 :(得分:0)

我最近发布了一个项目,可以让PHP访问浏览器。在此处获取:https://github.com/merlinthemagic/MTS

就像您目前使用的库一样,这也依赖于PhantomJS。

下载并设置后,您只需使用以下代码:

$myUrl          = "http://website.de";
$windowObj      = \MTS\Factories::getDevices()->getLocalHost()->getBrowser('phantomjs')->getNewWindow($myUrl);

//set the size of the window
$windowObj->setSize(1440, 900);

//now you can either retrive the DOM and parse it, like this:
$domData    = $windowObj->getDom();

//or you could write a function in javascript and then trigger it, like this:
$script = "function getLinks() {
                var array = [];
                var links = document.links;
                for(var i=0; i<links.length; i++) {
                    array.push(links[i].href);
                }
                return JSON.stringify(array);
            }";
//load the script on the page
$windowObj->loadJS($script);
//call the function
$scriptReturn   = $windowObj->callJSFunction("getLinks");
//convert the Json to an array of links
$linkArr        = json_decode($scriptReturn, true);