我在Mac OS X Yosemite上使用PhantomJS。在PhantomJS中,在調用page.evaluate()之前,page.switchToFrame(k)是否需要延遲才能識別新框架的文檔?
的邏輯很簡單:
- 下載與框架一些HTML頁面。
- 切換到每個框架並確定它是否包含一些HTML元素。
下面的代碼片段,其中我切換到每個幀:
for (var k = 0; k < page.framesCount; ++k) {
page.switchToFrame(k);
var eventHeaderFound = page.evaluate(function() {
var eventArr = [].filter.call(document.querySelectorAll("tr.twSimpleTableHeadRow th[scope='col']"), function(el) {
if (typeof el == 'undefined') {
return false;
}
return el.textContent.trim() == "Event"; }
);
return eventArr.length > 0;
});
似乎第一行中page.evaluate()函數(在那裏計算eventArr
),常導致該錯誤:
TypeError: undefined is not a constructor (evaluating 'this.each(function(A,z){if(y.call(x,A,z)){w.push(A)}})')
http://25livepub.collegenet.com/hash860B52FC5686DB189F1B18561705DAD0/scripts/prototype.js:2 in h
phantomjs://webpage.evaluate():2
phantomjs://webpage.evaluate():9
插入一些日誌指令(其中,在頁面的上下文,不寫處理標準輸出)後,這個錯誤有時會自行消失。在page.evaluate()
上下文中的幀document
變量可用之前是否需要page.switchToFrame
之後是否有延遲?
這樣的事情一定會發生。有時候,邏輯起作用;其他時間沒有。我已經在瀏覽器中確認資源/ URL是及時提供的,所以網絡延遲不是問題。
「未定義不是構造函數」出現了很多。嘗試添加換行符到您的eventArr構建代碼以獲取更具體的錯誤信息。 – dandavis