2

我正在尝试通过使用带有 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 的远程调试选项来调试上面的脚本。它不工作。我在窗户上。我也会尝试在 Ubuntu 上运行远程调试。

请帮我。我将不胜感激这方面的任何帮助。

更新:

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

https://gist.github.com/4441570

点击前和点击后的内容是一样的。

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

4

1 回答 1

4

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

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

在此之上加载另一个 jQuery 会破坏任何 js 调用,以及执行 Ajax 调用的链接。

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

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

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

以前分配给 $ 的任何内容都将以这种方式恢复。您注入的 jQuery 现在在“jq”下可用。

希望这对你们有帮助。

于 2013-02-28T19:35:53.620 回答