页面上有三个表单。所有表单的日期范围默认为"今天"。每个表单都迭代地提交一个日期范围(例如,1/1/2013 - 1/3/2013),并抓取结果表。
然后脚本将日期提交到下一个表单,再次刮擦表。但是,在提交日期之前就会进行抓取。我试着在刮痕之间添加sleep 2
,但无济于事。
脚本在这里:https://gist.github.com/hnanon/de4801e460a31d93bbdc
脚本似乎假设Nokogiri和Watir将始终保持同步。这是不对的。
当你这样做的时候:
page = Nokogiri::HTML.parse(browser.html)
Nokogiri在该特定时间点获取浏览器的html。如果Watir更改了浏览器(即更改了html), Nokogiri将不会知道它。
每次想用Nokogiri解析html时,都需要使用浏览器的最新html创建一个新的Nokogiri对象。
举例说明:
require 'watir-webdriver'
require 'nokogiri'
b = Watir::Browser.new
b.goto 'www.google.ca'
page = Nokogiri::HTML.parse(b.html)
p page
#=> This will be the Google page
b.goto 'www.yahoo.ca'
p page
#=> This will still be the Google page
page = Nokogiri::HTML.parse(b.html)
p page
#=> This will now be the Yahoo page