2014-01-28 37 views
0

我正在使用Nokogiri從http://www.englandgallery.com/artists.php中刪除藝術家列表。我需要使用Watir,因爲該頁面會使用JavaScript加載藝術家。 我的代碼看起來像這樣如何更改Watir執行後的DOM執行腳本

browser = Watir::Browser.new(:phantomjs) 
browser.goto "http://www.englandgallery.com/artists.php" 
browser.execute_script("javascript:loadContent('ALL');") 
indexPage = Nokogiri::HTML(browser.html) 
artists = indexPage.css('a.artistlink') 
artists.each do |artist| 
    puts artist.text 
end 

默認只顯示當代藝術家的頁面,所以你需要執行JS加載所有的藝術家。我確信loadContent('ALL')被執行並且實際上將所有藝術家加載到該頁面,但是隻有當代藝術家被選擇到artists陣列。我錯過了什麼?我是否需要以某種方式重新加載瀏覽器以獲取當前的DOM?

回答

0

看來執行javascript:loadContent('ALL');之後,需要一段時間才能真正更新列表。您可以嘗試sleep幾秒鐘。

browser = Watir::Browser.new(:phantomjs) 
browser.goto "http://www.englandgallery.com/artists.php" 
browser.execute_script("javascript:loadContent('ALL');") 
sleep 5 
indexPage = Nokogiri::HTML(browser.html) 
artists = indexPage.css('a.artistlink') 
artists.each do |artist| 
    puts artist.text 
end 
+0

解決了它,謝謝! – vorelq

+0

爲什麼你需要在那裏使用Nokogiri?使用普通的watir就足夠了 - 'browser.a(class:「artistlink」)。each {| artist |放置artist.text}' –