簡體   English   中英

Heisenbug擁有自己的無頭瀏覽器

[英]Heisenbug with own headless browser

我正在開發基於WebKit(使用C ++ / Qt4)和JavaScript支持的無頭瀏覽器。 這樣做的主要目的是能夠在很大程度上基於JavaScript生成HTML網站的spanshot(參見Backbone.js或任何其他JavaScript MVC)。

我知道沒有任何方法可以知道頁面何時被完全加載(請參閱此問題 ),因此,在我獲得loadFinished信號( 此處為 docs)后,我創建了一個計時器並開始輪詢DOM內容(如檢查每個X ms的DOM內容)以查看是否有任何更改。 如果沒有我認為頁面已加載並打印結果。 請記住,我已經知道這不是一個接近完美的解決方案,但它是我能想到的唯一一個。 如果您有任何更好的想法,請回答這個問題

注意:計時器是非阻塞的,這意味着WebKit中運行的所有內容都不應以任何方式受到影響/阻止/暫停。

在用一些頁面測試無頭瀏覽器之后,一切似乎都運行良好(或至少如預期的那樣)。 但這里是heisenbug出現的地方。 應該從PHP腳本調用無頭瀏覽器,該腳本應等待(阻塞調用)某些輸出,然后打印它。

在我的測試機器(Apache 2.3.14,PHP 5.4.6)上運行PHP腳本輸出所需的結果,也就是說,無頭瀏覽器獲取網站,運行JavaScript並打印用戶將看到的內容; 但是在生產服務器中運行相同的腳本將獲取網站,運行一些 JavaScript代碼並打印結果。

我可以在這里找到無頭瀏覽器的源代碼和我正在使用的PHP腳本。

注意:計時器(如您在無頭瀏覽器的源代碼中所見)設置為1秒,但設置更長的時間並不能解決問題

注意2:捕獲所有JavaScript錯誤沒有顯示任何內容,因此不是因為缺少函數,錯誤的args或任何其他類型的錯誤代碼。

我正在用2個網站測試無頭瀏覽器。 這個是在我的測試機器和生產服務器上工作,而這個只適用於我的測試機器。

我更傾向於認為這是第二個網站中JavaScript代碼中的一些奇怪的錯誤,而不是無頭瀏覽器的代碼,因為它生成了第一個網站的完美HTML快照,但話又說回來,這是一個heisenbug所以我不確定是什么導致了這一切。

任何想法/意見將不勝感激。 謝謝

而不是輪詢DOM更改,為什么不觀看網絡請求? 這似乎是一個更安全的啟發式使用。 如果X ms沒有網絡活動(並且沒有待處理請求),則假設頁面已完全“加載”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM