Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Phantomjs 使CasperJS完全重新加载片段(hashbang)链接_Phantomjs_Casperjs_Hashbang - Fatal编程技术网

Phantomjs 使CasperJS完全重新加载片段(hashbang)链接

Phantomjs 使CasperJS完全重新加载片段(hashbang)链接,phantomjs,casperjs,hashbang,Phantomjs,Casperjs,Hashbang,当我使用这个示例时,我发现同一页面上的一系列hashbang链接(动态创建不同的内容)只在第一次生成内容。对于所有其他结果,使用第一个链接中的this.getHTML() 例如,当我加载http://test.localhost/它会发现: http://test.localhost/#!/page1 http://test.localhost/#!/page2 http://test.localhost/#!/page3 每次迭代都使用#的内容/第1页。当我以相反的顺序添加列表时,每次迭代都

当我使用这个示例时,我发现同一页面上的一系列hashbang链接(动态创建不同的内容)只在第一次生成内容。对于所有其他结果,使用第一个链接中的
this.getHTML()

例如,当我加载<代码>http://test.localhost/它会发现:

http://test.localhost/#!/page1
http://test.localhost/#!/page2
http://test.localhost/#!/page3
每次迭代都使用
#的内容/第1页
。当我以相反的顺序添加列表时,每次迭代都使用
#的内容/第3页
。就像第一次一切都很完美,但是CasperJS或PhantomJS在内部检测到哈希更改而不是新的URL,不加载
onHashChange
功能,并忽略它

如何让CasperJS重新加载每个URL,即使哈希值发生了变化,就好像它是第一次打开一样


我使用的是PhantomJS 1.9.18,它会自动随附。

这可能是PhantomJS 1.x中的一个bug(不保证)。如果您不想将PhantomJS更新到版本2,那么您可能希望根据您的观察结果,使用“干净的板岩”来完成每个迭代。看起来您正在按如下顺序打开页面:

casper.thenOpen(url[0],function(){/*do something*/});
thenOpen(url[1],function(){/*dosomething*/});
thenOpen(url[2],function(){/*dosomething*/});
解决此问题的一种方法可能是在这些调用之间加载完全不同的页面:

casper.thenOpen(url[0],function(){/*do something*/});
卡斯珀,然后打开(“http://example.com");
thenOpen(url[1],function(){/*dosomething*/});
卡斯珀,然后打开(“http://example.com");
thenOpen(url[2],function(){/*dosomething*/});
非常适合这种情况,因为它总是在线的,而且非常小,但这仍然会产生不必要的请求。另一种方法是在完成当前页面后将其重置为“关于:空白”:

casper.thenOpen(url[0],function(){/*do something*/});
然后(函数(){this.page.content=”“;});
thenOpen(url[1],function(){/*dosomething*/});
然后(函数(){this.page.content=”“;});
thenOpen(url[2],function(){/*dosomething*/});

清空页面内容并更改当前URL,以便下一个打开操作可以被清除。

我遇到了与PhantomJS非常相似的情况。这简直把我逼疯了。我花了很长时间才弄明白,但我的“小”技巧是:

return client
  .url('about:blank') // Weee
  .url('http://www.foo.com/#meow')
  .waitForElementVisible('body', 1000)

您使用的是什么PhantomJS版本?您是否尝试过PhantomJS 2(可能需要从git安装CasperJS)?
1.9.18
,自动随附。我不想改变上游给我的东西。所以,如果你说这是一个旧版本的问题,我正在寻找一个解决办法。谢谢,向上投票。等着看我的最终解决方案是什么。