【问题标题】:CasperJS click event having AJAX call具有 AJAX 调用的 CasperJS 单击事件
【发布时间】:2012-12-31 06:54:41
【问题描述】:

我正在尝试通过使用带有 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

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

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

【问题讨论】:

  • 这个有更新吗?我也有类似的问题。
  • 转到 GitHub 链接。我所能弄清楚的是由于 jQuery 注入而出现了一些错误。我已经在那里发布了我的 cmets 和问题,我仍在等待回复。

标签: ajax screen-scraping phantomjs casperjs


【解决方案1】:

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

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

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

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

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

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

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

希望这对你们有帮助。

【讨论】:

  • 不想让我过早地抱有希望,但这个修复似乎正在奏效。奇怪,因为我可以在我正在抓取的页面上找到 jQuery.. 无论如何。谢谢!
  • 不一定是 jQuery。 $ 可能会引用另一个库,并且在您注入 jQuery 时会被破坏。使用 noConflict() 将恢复以前的别名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多