我試圖獲取某些網頁URI的HTML(即最初在頁面完成加載時看到的內容)。剔除所有錯誤檢查和假設靜態的HTML,它是一個單一的代碼行:在PHP中爲HTML頁面獲取OnLoad HTML/DOM
function GetDisplayedHTML($uri) {
return file_get_contents($uri);
}
這工作得很好靜態HTML,並且易於通過簡單的解析延長,如果頁面具有靜態文件依賴性/引用。因此,像<script src="XXX">, <a href="XXX">, <img src="XXX">, and CSS
這樣的標籤也可以被檢測到,並且依賴關係在數組中返回,如果它們很重要的話。
但是,如何使用events/AJAX動態創建HTML的網頁呢?例如,假設網頁的HTML只是一個簡短的基於AJAX或OnLoad的腳本,它構建了可見的網頁?然後獨自解析將無法工作。我想我需要的是從PHP內部的一種方式,通過一些JavaScript引擎或瀏覽器打開和呈現http響應(即我們首先獲得的HTML),一旦它「穩定下來」,捕獲HTML(或靜態的DOM?),現在,這將是用戶真正看到的。由於這樣的網頁可能會不斷變化,我必須定義「穩定」(OnLoad或X秒後?)。我也不需要捕獲任何計時器或異步事件狀態(即「可能會在未來某個時間導致網頁更新的動作設置」)。我只需要足夠的DOM來表示用戶當時可以看到的靜態外觀。
我需要做什麼,以編程方式在PHP中實現這個功能?
有預渲染服務,它將在頁面中進行代理,處理javascript,並提供呈現的html。許多使用JavaScript密集型應用程序的開發人員使用這些服務將呈現的內容輸出到Google和其他搜索引擎。這聽起來像你需要採取這樣的方法。這樣的事情可能是這樣的:https://github.com/prerender/prerender – skrilled
我不想依賴第三方在線服務。但是我發現prerender是[PhantomJS](http://phantomjs.org)的一個基礎,它可以在很多平臺上運行,並且有使用示例。我猜可以在PHP代碼中運行,並可能解決這個問題?你是這麼認爲的嗎? – Stilez