如何在Watir execute_script之后更改DOM

时间:2014-01-28 17:11:54

标签: ruby web-scraping nokogiri watir

我正在使用Nokogiri从http://www.englandgallery.com/artists.php中删除艺术家名单。我需要使用Watir,因为页面使用javascript加载艺术家。 我的代码看起来像这样

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?

1 个答案:

答案 0 :(得分: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