2016-10-03 91 views
-3

一些特定的網站只返回一些代碼/ HTML,而不是完整的頁面 例如:「https://www.origin.com/deu/de-de/store/mirrors-edge/mirrors-edge-catalyst/standard-editionPHP:的file_get_contents不與某些JavaScript的網站工作

您與觀看圖像時獲得完整的頁面瀏覽器開發工具。

但不能與:

  • 查看頁面源代碼
  • 的file_get_contents
  • curl_init

有沒有什麼辦法讓 「真正」 的內容?

謝謝!

+0

你想創建一個釣魚網站或什麼? – evolutionxbox

+1

好吧,沒有什麼負面的^^ 如果你願意的話,我自己寫了一個「遊戲願望清單」,它可以直接從商店中獲取遊戲的價格。 原產地就像其他網站一樣工作(例如蒸汽),但他們前一段時間改變了他們的商店... – dlder

回答

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 

UPDATE

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) 
}); 
+0

Thx,我查看了phantomjs,當我將該網站寫入png時,我可以看到價格(其中我想提取)。 但是當把數據寫入文本文件時,價格不在那裏? 這與file_get_contents幾乎相同... – dlder

+0

澄清:如果我使用幻影函數寫入文件,它不起作用: var page = require('webpage')。create(), system = require('system'),url; var fs = require('fs'),system = require('system'); (system.args.length <2){ } \t console.log('Usage:test.js URL'); \t phantom.exit(); } var url = system。ARGS [1]; page.open(URL,功能(狀態){ \t如果(狀態=== 「成功」){ \t \t fs.write( 「TEST.DAT」,page.content, 'W'); \t } \t phantom.exit(); }); ' 但是,當在命令行中「滾動」輸出時,我確實得到了整個頁面代碼! 'phantomjs test.js URL> test.dat' – dlder

+0

使用setTimeout等待整頁內容。或者添加回調。 http://phantomjs.org/api/webpage/handler/on-resource-received.html –

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) 
}); 

的回調等到整個頁面加載或一個特定的元素會更好,但我還沒有發現對如何做到這一點尚未...

相關問題