PHP获取渲染的Javascript页面

时间:2015-12-07 09:05:23

标签: javascript php angularjs ajax

我正在使用AngularJS开发应用程序。一切似乎都很好,直到我遇到让我头疼的事情:SEO。

从许多参考资料中,我发现由谷歌机器人或Bing机器人抓取并编入索引的AJAX内容并不那么容易。'因为爬虫不会渲染Javascript。

目前我需要一个使用PHP的解决方案。我使用PHP Slim Framework,所以我的主文件是index.php,它包含回显我的index.html内容的函数。我的问题是:

是否可以在HTML中制作呈现的Javascript快照?

我的策略是:

如果请求查询字符串包含_escaped_fragment_,则应用程序将生成快照并将该快照作为响应而不是确切文件。

任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

经过大量的搜索和研究,我终于通过将PHP与PhantomJS(版本2.0)混合来解决我的问题。我在PHP中使用exec()函数来运行phantomJS并创建Javascript文件以获取目标URL的内容。以下是片段:

<强>的index.php

// Let's assume that you have a bin folder under your root folder directory which contains phantomjs.exe and content.js
$script = __DIR__ ."/bin/content.js";
$target = "http://www.kincir.com"; // target URL
$cmd = __DIR__."/bin/phantomjs.exe $script $target";
exec($cmd, $output);
return implode("", $output);

<强> content.js

var webPage = require('webpage');
var system = require('system');
var page = webPage.create();
var url = system.args[1]; // This will get the second argument from $cmd, in this example, it will be the value of $target on index.php which is "http://www.kincir.com" 
page.open(url, function (status) {
  page.onLoadFinished = function () { // Make sure to return the content of the page once the page is finish loaded
      var content = page.content;
      console.log(content);
      phantom.exit();
  };
});

答案 1 :(得分:0)

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

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

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

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

//this project also lets you manipulate the live page. Click, fill forms, submit etc.