具有AJAX调用的CasperJS点击事件

时间:2012-12-31 06:54:41

标签: ajax screen-scraping phantomjs casperjs

我试图通过使用带有phantomJS 1.7.0的CasperJS模拟事件来从站点获取数据。

我能够模拟正常点击事件并选择事件。但是我的代码在以下场景中失败了:

当我点击远程页面上的按钮/锚点等时,单击远程页面会启动一个AJAX调用/ JS调用(取决于程序员如何实现该页面)。

如果是JS调用,我的代码可以工作,我会更改数据。但是对于启动了AJAX调用的点击,我没有获得更新的数据。

为了调试,我试图获取元素容器的页面源(之前和之后),但我看不到代码的变化。

我尝试将等待时间从10秒设置为1毫秒,但这并不反映行为的任何变化。

下面是我点击的代码。我正在使用一个CSS路径数组,它表示要点击的元素。

/*Click on array of clickable elements using CSS Paths.*/
fn_click = function(){
casper.each(G_TAGS,function(casper, cssPath, count1) 
                    {
                            casper.then ( function() {
                            casper.click(cssPath);

                            this.echo('DEBUG AFTER CLICKING -START HTML ');
                            //this.echo(this.getHTML("CONTAINER WHERE DETAILS CHANGE"));
                            this.echo('DEBUG AFTER CLICKING -START HTML');
                            casper.wait(5000, function() 
                                                    {   

                                                        casper.then(fn_getData);
                                                    } 
                                    );
                            });     
                    });
};

更新:

我尝试使用phantomJS中的remote-debug选项来调试上面的脚本。 它不起作用。我在窗户上。我也会尝试在Ubuntu上运行远程调试。

请帮帮我。我将不胜感激任何帮助。

更新:

请查看以下代码作为示例。

https://gist.github.com/4441570

点击前和点击后的内容相同。

我点击标签下的排序选项(投票/活动等)。

1 个答案:

答案 0 :(得分:5)

我今天遇到了同样的问题。我找到了这篇文章,这让我朝着jQuery的方向发展。

经过一些测试后,我发现该网页上已经加载了jQuery。 (虽然很老的版本)

在其上加载另一个jQuery破坏了所做的任何js调用,以及执行Ajax调用的链接。

为了解决这个问题,我找到了http://api.jquery.com/jQuery.noConflict/

我在代码中添加了以下内容:

    this.evaluate(function () { jq = $.noConflict(true) } ); 

以前分配给$的任何东西都将以这种方式恢复。您注入的jQuery现在可以在'jq'下使用。

希望这可以帮助你们。