2012-10-03 136 views
1

可以說我有一點javascript代碼從PHP傳遞了一個包含整個html頁面的字符串。我將字符串寫入當前文檔,然後更改其中一個包含元素。事情是這樣的:查看javascript生成的html頁面的實際html源代碼

<script type="text/javascript"> 
var foo = <?php echo $html_document;?>; 
document.open(); 
document.write(foo); 
document.close(); 
document.getElementById("some_id_within_html_document").innerHTML = "some stuff"; 
</script> 

這使我有我的期望輸出,一切都看起來不錯。當你查看該網頁的源時除外。如果我想稍後刮這個頁面並做同樣的事情,它會顯示javascript而不是瀏覽器解釋的html。使用這種方法,我怎麼可以刮取所需的HTML而不是生成它的JavaScript?我已經通過在php中處理字符串來繞過這個問題,但是我仍然很好奇,如果可以在查看源代碼/抓取頁面時以這種方式顯示解釋的HTML。

編輯: 大家都非常滿意,我從中學到了很多有關這裏實際發生的事情以及我應該遠離哪些做法。賈斯汀伍德給出了最簡單的解決方案,這個解決方案與我原來的問題相比,花費最少。

+0

你意識到這是一個oxmoron?如果頁面是由腳本生成的,則它沒有源標記。但是,innerHTML屬性應該是基於[HTML片段序列化算法](http://dev.w3.org/html5/spec/single-page.html#serializing-html-fragments)的標記等價物。請注意,序列化文檔片段,然後使用HTML解析器將結果轉換回片段可能不會產生與原始結果相同的結果。 – RobG

回答

1

不會將您的PHP變量傳遞給javascript。只需輸出變量本身,然後使用JavaScript編輯任何你想編輯的內容......

<?php 
$html = "<html><head><title></title></head><body><p id='p'>Something</p></body></html>"; 

echo $html; 
?> 

<script type="text/javascript"> 
    document.getElementById("p").innerHTML = "blah"; 
</script> 

這樣的東西應該適合你。

注:我只是在鍍鉻,FF和Safari

+0

這是一個替代方案,謝謝我將不得不嘗試一下。 –

1

你不知道。 HTML不在源代碼期間。原始HTML包含需要執行的Javascript。該JavaScript操縱頁面的DOM來添加更多的東西。原始的HTML不會改變,它仍然只有Javascript。

如果你想「刮」Javascript生成的內容,你總是需要解析和執行整個頁面,包括Javascript和一個DOM,並評估結果改變的DOM。

+0

好奇,我使用CodeIgniter框架運行php,我確信有一種方法可以做到這一點。我會看看它,謝謝! –

0

由於JavaScript是一種客戶端語言,因此在查看頁面源時並不會執行該操作,從而導致可視化結果與源代碼之間的差異。您將不得不用PHP替換JS或另一種服務器端語言來實現相同的結果。另外,如果你仍然想使用JavaScript,那麼在執行JavaScript之後,你將不得不查看保存所有HTML節點的DOM或文檔對象。一種方法是在Chrome中使用檢查器(CTRT + SHIFT + I)或(右鍵單擊 - >檢查此元素)。

1

不完全知道你正在嘗試做的,但你可以看到HTML相當於生成/修改使用像DOM測試這樣的:

document.documentElement.innerHTML 

或:

document.getElementById("some_id").innerHTML 

DEMO

您可以create a bookmarklet包括此代碼:

alert(document.documentElement.innerHTML); 

看到由JavaScript您查看每個頁面上修改DOM的HTML。

更新:

如果你想要做一些網頁抓取您的服務器上,你想下載一些外部網頁,執行它的JavaScript,然後看到後對應於DOM的HTML執行JavaScript(使用document.write調用和所有這些),然後嘗試使用ZombiePhantom。有關支持Zombie的PHP工具,另請參閱Mink

一般用JavaScript引擎搜索無頭瀏覽器。

與人們在這裏寫的其他答案相反,它實際上是可能的。