使用PhantomJS单击基于框架的站点上的某个链接

时间:2015-02-17 12:51:04

标签: javascript phantomjs frames

我有一个基于框架的网站,我需要点击左框架(菜单)中的链接,以获取大型机中的新内容。这可能在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();   
     }
}

那些东西不起作用= \

1 个答案:

答案 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的所有元素。