上考慮以下(工作)PhantomJS一段代碼,應該點擊whatever
類的第一個元素:循環並單擊querySelectorAll清單,PhantomJS
page.evaluate(
function()
{
var a = document.querySelector(".whatever");
var e = document.createEvent('MouseEvents');
e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
waitforload = true;
}
);
我不能讓所有的循環類whatever
的元素 - 問題不是循環本身,而是訪問querySelectorAll
元素。
我堅持在這裏(我通過訪問第一個元素更容易調試更換循環;當然也有是兩個page.evaluate
電話,因爲第二個是內環路):
var aa = page.evaluate(
function()
{
return document.querySelectorAll(".whatever");
}
)
//for (i=0; i<aa.length; i++)
//{
page.evaluate(
function()
{
var e = document.createEvent('MouseEvents');
e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
// aa[i].dispatchEvent(e);
aa[0].dispatchEvent(e);
waitforload = true;
}
);
//}
我嘗試了幾個變化,刪除var
,用document.
作爲變量的前綴,試圖通過aa
作爲參數等。沒有任何工作(我可能錯過了正確的組合,但無論如何,我明顯缺少這裏的基礎)。
我不確定它是否與名稱空間和變量範圍(我對JS很新)有關,或者如果問題來自querySelectorAll
輸出(儘管我檢查了數組的大小是否正確),因爲我遇到「ReferenceError:找不到變量」和「TypeError:'undefined'不是對象」錯誤。
任何暗示都會受到歡迎。基於
是的,這與範圍/沙箱非常相關。有多種解決方案。問題是這些點擊是做什麼的?加載一個新頁面或只是改變頁面的狀態?如果是後者,你是否需要從相同的狀態開始,或者如果你只是一個接一個地點擊所有內容,那麼是否可以? – 2014-11-06 16:22:22
我當然不知道。一次點擊就會加載一個包含額外信息的框該框本身隱藏了其他按鈕,因此我不知道一旦顯示該框時單擊另一個按鈕時會發生什麼。我的猜測是,它將取代或在前面的框頂部。無論如何,我的目標是讓所有這些盒子。所以一開始我會嘗試點擊一個接一個地點。 – 2014-11-06 16:55:07