我有一个基于框架的网站,我需要点击左框架(菜单)中的链接,以获取大型机中的新内容。这可能在phantomjs中做到吗?什么是algorythm?谢谢。
var frame = document.getElementsByTagName('frame')[2];
var links = frame.contentDocument.document.getElementsByTagName('a');
for(var l = 0; l < links.length; l++){
if(links[l].href.indexOf("home") > -1)
{
alert(links[l].href);
//links[l].click();
}
}
那些东西不起作用= \
答案 0 :(得分:1)
您必须先switch to a frame,然后才能在其中执行某些操作。要实际点击元素this question,可以获得所有答案:
page.switchToChildFrame(0); // select frame by index or name
page.evaluate(function(){
function click(el){
// copied from https://stackoverflow.com/a/15948355
var ev = document.createEvent("MouseEvent");
ev.initMouseEvent(
"click",
true /* bubble */, true /* cancelable */,
window, null,
0, 0, 0, 0, /* coordinates */
false, false, false, false, /* modifier keys */
0 /*left*/, null
);
el.dispatchEvent(ev);
}
click(document.querySelector('a[href*="home"]'));
});
// switch back when you're done
page.switchToParentFrame();
如此处所见。您不需要迭代元素来单击它。适当地使用querySelector
属性CSS选择器。 [attribute*=value]
选择attribute
某处包含value
的所有元素。