2014-01-28 2 views
0

Я использую Nokogiri, чтобы очистить список исполнителя от http://www.englandgallery.com/artists.php. Мне нужно использовать Watir, потому что страница загружает художников, используя javascript. Мой код выглядит следующим образомКак получить измененный DOM после Watir execute_script

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 (класс:« artistlink »). Each {| artist | puts artist.text} ' –

Смежные вопросы