我正在使用诺科吉里(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?
似乎在执行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