casper.waitForSelector不适用于动态DOM操作
问题描述:
这是我的代码, 具有相同选择器的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
答
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
您目前拥有两个'waitForSelector'没有任何之间。它不可能是元素消失。你可能想用'casper.thenClick()'来代替,因为'casper.click()'立即执行,并且会抛出一个错误。请让你的问题更清楚。 – 2015-03-25 12:38:56
@ArtjomB。点击立即执行,并更改页面中的组件。我通过截图验证了这一点。并且会发生什么是一些组件被替换的dom是我相信的。在此之后,相同的waitForSelector失败。如果我转储HTML我可以看到组件 – vumaasha 2015-03-25 13:30:34
@ArtjomB。然后使用它的工作。我似乎没有区别。点击下拉列表后,我希望等到结果出现后,为什么会起作用。我有点困惑什么时候使用,何时不使用 – vumaasha 2015-03-25 15:56:25