1

このページには3つのフォームがあります。すべてのフォームの日付範囲は、デフォルトで「今日」になっています。各フォームは、範囲(たとえば、2013年1月1日から2013年1月3日)の日付で繰り返し送信され、結果のテーブルはスクレイプされます。

次に、スクリプトは日付を次のフォームに送信し、テーブルがスクレイプされます。ただし、日付が送信される前にスクレイピングが発生しています。

擦り傷の間に追加sleep 2してみましたが無駄になりました。

スクリプトはここにあります:https ://gist.github.com/hnanon/de4801e460a31d93bbdc

4

1 に答える 1

3

スクリプトは、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
于 2013-03-25T18:37:34.857 に答える