2015-03-25 36 views
1

这是我的代码, 具有相同选择器的waitForSelector在动态dom操作之前工作正常。不知道这是否是一个错误。casper.waitForSelector不适用于动态DOM操作

casper.start("http://www.collierscanada.com/en/Properties?t=2") 
# works here 
casper.waitForSelector('#propertiesListView') 
# changing the number of results displayed per page 
casper.click('#dk_container_main_0_results_propResultsPerPage > a > span.dk_arrow > span') casper.waitForSelector('#dk_container_main_0_results_propResultsPerPage.dk_open') 
casper.click('#dk_container_main_0_results_propResultsPerPage > div > ul > li:nth-child(6) > a') 
# same selector does not work here 
# some dynamic dom manipulation is happening in between 
casper.waitForSelector('#propertiesListView') 

错误

[warning] [phantom] Casper.waitFor() timeout 
[error] [phantom] Wait timeout of 15000ms expired, exiting 
+0

您目前拥有两个'waitForSelector'没有任何之间。它不可能是元素消失。你可能想用'casper.thenClick()'来代替,因为'casper.click()'立即执行,并且会抛出一个错误。请让你的问题更清楚。 – 2015-03-25 12:38:56

+0

@ArtjomB。点击立即执行,并更改页面中的组件。我通过截图验证了这一点。并且会发生什么是一些组件被替换的dom是我相信的。在此之后,相同的waitForSelector失败。如果我转储HTML我可以看到组件 – vumaasha 2015-03-25 13:30:34

+0

@ArtjomB。然后使用它的工作。我似乎没有区别。点击下拉列表后,我希望等到结果出现后,为什么会起作用。我有点困惑什么时候使用,何时不使用 – vumaasha 2015-03-25 15:56:25

回答

0
casper.start("http://www.collierscanada.com/en/Properties?t=2") 
casper.waitForSelector('#propertiesListView', function() { 
    casper.click('#dk_container_main_0_results_propResultsPerPage > a > span.dk_arrow > span') 
}); 
casper.waitForSelector('#dk_container_main_0_results_propResultsPerPage.dk_open').thenClick('#dk_container_main_0_results_propResultsPerPage > div > ul > li:nth-child(6) > a') 
casper.waitForSelector('#propertiesListView') 
+0

欢迎来到SO,感谢您在这里发表。虽然你的代码可能会回答这个问题,但最好包含一些解释。这样,OP和任何其他访问者将能够更深入地了解您的解决方案。 – dhh 2015-09-22 05:15:02