2015-03-25 58 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