我试图通过使用带有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
点击前和点击后的内容相同。
我点击标签下的排序选项(投票/活动等)。
答案 0 :(得分:5)
我今天遇到了同样的问题。我找到了这篇文章,这让我朝着jQuery的方向发展。
经过一些测试后,我发现该网页上已经加载了jQuery。 (虽然很老的版本)
在其上加载另一个jQuery破坏了所做的任何js调用,以及执行Ajax调用的链接。
为了解决这个问题,我找到了http://api.jquery.com/jQuery.noConflict/
我在代码中添加了以下内容:
this.evaluate(function () { jq = $.noConflict(true) } );
以前分配给$的任何东西都将以这种方式恢复。您注入的jQuery现在可以在'jq'下使用。
希望这可以帮助你们。