上考虑以下(工作)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