我有一个基于框架的网站,我需要单击左侧框架(菜单)中的链接,以便在大型机中获取新内容。这可以在phantomjs中实现吗?算法是什么?非常感谢。
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();
}
}
这些东西不起作用=\
你必须先切换到一个框架,然后才能在其中做一些事情。要真正点击一个元素,这个问题有所有的答案:
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选择器。CCD_ 2选择其CCD_ 3某处包含CCD_ 4的所有元素。