在phantomjs中触发li元素上的click事件

时间:2015-12-23 21:06:53

标签: phantomjs

为什么我的函数不会触发phantomjs中的click事件,但它在chrome浏览器中是什么?特别是在li元素上。

if(page.injectJs("./jquery-2.1.4.min.js") == false){
                    console.log("jquery Failed")
                }
                var sizePicked = page.evaluate(function(){
                    var Elements = document.getElementsByTagName("li");
                    for(i = 0; i < Elements.length; i++){
                        if (Elements[i].innerHTML.toLowerCase().indexOf("10") !== -1) {
                            $(Elements[i]).trigger("click");
                            break;
                        }
                    }
                })

这是我正在使用的网站on

1 个答案:

答案 0 :(得分:2)

在早期的PhantomJS版本(2.0.0之前)中,底层渲染引擎不支持HTMLElement元素上的click()函数,但在HTMLInputElement元素(输入和按钮)上支持它。这就是为什么你可以点击()输入按钮而不是&lt; li&gt; s。

您的案例有两种可能的解决方案:

A)切换到PhantomJS 2

B)使用垫片模拟HTMLElements上的click()函数。只需在脚本顶部发出此evaluate,它就可以在以后的evaluates中使用。

page.evaluate(function(){
    if (!HTMLElement.prototype.click) {
        HTMLElement.prototype.click = function() {
          var ev = document.createEvent('MouseEvent');
          ev.initMouseEvent(
              'click',
              /*bubble*/true, /*cancelable*/true,
              window, null,
              0, 0, 0, 0, /*coordinates*/
              false, false, false, false, /*modifier keys*/
              0/*button=left*/, null
          );
          this.dispatchEvent(ev);
        };
    }        
});

来自this solution的代码