PHP:file_get_contents不适用于某些JavaScript网站

时间:2016-10-03 08:42:33

标签: javascript php curl

某些网站只返回部分代码/ html,而不是整页 例如:" https://www.origin.com/deu/de-de/store/mirrors-edge/mirrors-edge-catalyst/standard-edition"

使用浏览器开发人员工具查看时,您可以获得整页。

但不是:

  • 查看页面来源
  • 的file_get_contents
  • curl_init

有没有办法让#34;真实"内容?

谢谢!

2 个答案:

答案 0 :(得分:0)

使用phantomjs。例如:

文件test.js

var page = require('webpage').create();
var url = 'https://www.origin.com/deu/de-de/store/mirrors-edge/mirrors-edge-catalyst/standard-edition';
page.open(url, function (status) {
console.log(page.content)    
phantom.exit();

});

在服务器运行命令

中安装phantomjs之后
phantomjs test.js

<强>更新

var ok = 'Your needed content';
var iterator = 0;
page.open(url, function(status) {
   setInterval(function () {
       if(page.content.indexOf(ok) > -1) {
          console.log (page.content);
          phantom.exit(0)
       }
       iterator++;
       if(iterator > 50) {
          cosole.log('Bad content');
          phantom.exit(0);
        }
    }, timeInterval)
});

答案 1 :(得分:0)

好的,所以为了完整起见,这里是我现在使用的代码:
PHP

$PhantomTimeout = 5000; // timeout to wait for js-functions on websites like Origin.com
if (parse_url ($_GET["url"], PHP_URL_HOST) == 'www.origin.com')
{
    exec ('phantomjs.exe --ignore-ssl-errors=true --load-images=false fetch_external.js "'.$_GET["url"].'" '.$PhantomTimeout, $DataArr);
    $Data = implode ('\n', $DataArr);
}

<强> JS

"use strict";
var page = require('webpage').create(), system = require('system'), url;

if (system.args.length < 3) {
    console.log ('Usage: fetch_external.js URL TIMEOUT');
    phantom.exit (1);
}

var url = system.args[1];
var time = system.args[2];

page.open(url, function(status) {
    setTimeout(function () {
        console.log (page.content);
        phantom.exit(0)
    }, time)
});

等待整个页面加载或特定元素更好的回调,但我还没有发现如何做到这一点......