2013-07-04 89 views
2

我正在使用PhantomJS来尝试和刮琐问题及其答案。在Stackoverflow的帮助下。我的Javascript一点了解,所以请解释什么,我做错了详细 页面有:触发点击事件PhantomJS

http://www.buddytv.com/trivia/game-of-thrones-trivia.aspx 

下面的代码:

function click(el) { 
    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('a[href="javascript:___gid_10(0)"]'); 
    answer = page.evaluate(function() { 

    return $('body').html(); 
    }); 

我想点击第一个回答并返回页面之后返回的任何内容(除非它返回NULL)。任何帮助感谢!谢谢。

+0

的字符串被传递到点击的方法,而不是一个实际的元素,所以dispatchEvent被称为上字符串,而不是页面上的元素。您需要以某种方式获取元素的引用才能使其工作。 – Douglas

回答

3

常见问题:为什么不换页立即一旦我派出我的事件?

在单击您需要使用window.setTimeout检查页面一段时间之后所做的更改。说一秒钟。或5.因为页面不会立即更改。他们需要时间来加载和渲染。

我想石膏这个答案遍布PhantomJS网站的首页。

常见问题解答:我想在我的页面上发送活动。怎么样?

那么 - 你必须从page.evaluate()呼叫内部进行调度。否则,您只需在PhantomJS上发送一个事件。这是毫无意义的。

+0

aaaah,猜我错过了那部分,谢谢。 – Callombert

+0

PP。有什么方法可以确定我们应该等待多少? –

+0

不幸的是,等待循环中使用的CPU越多,PhantomJS的确使用了合理数量的CPU。我认为250毫秒就足够了,因为人类的反应会比这更快。 –

0

试试这个

function click(el){ 
     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); 
    } 
+1

是不是完全一样的东西? – Callombert