具有AJAX调用的CasperJS点击事件

Lea*_*ore 2 ajax screen-scraping phantomjs casperjs

我试图通过使用CasperJS和phantomJS 1.7.0模拟事件来从站点获取数据.

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

当我点击远程页面上的按钮/锚点等时,单击远程页面会启动一个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);
                                                    } 
                                    );
                            });     
                    });
};
Run Code Online (Sandbox Code Playgroud)

更新:

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

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

更新:

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

https://gist.github.com/4441570
Run Code Online (Sandbox Code Playgroud)

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

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

Lee*_*tje 5

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

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

加载另一个jQuery打破了所有js调用,以及执行Ajax调用的链接.

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

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

    this.evaluate(function () { jq = $.noConflict(true) } ); 
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助你们.

  • 它不一定是jQuery.$可能会引用另一个库,并在注入jQuery时会被破坏.使用noConflict()将恢复以前的别名. (2认同)