非営利目的で、スクレーパーを作成しようとしています。以前に PhantomJS を使用したことがありますが、通常は魅力的に機能します。ただし、次の問題に遭遇しました。
私がしたいこと:
- http://de.soccerway.com/national/germany/bundesliga/2010-2011/regular-season/r11840/にアクセスしてください
- 「Spieltagごと」ボタンをクリックします
- 次に、マッチデーを保持するドロップダウン メニューからオプションを選択します。
- Ajax 呼び出しが完了するのを待ってから、必要な情報を取得する
残念ながら、選択したいオプションを選択できますが、その後何も起こりません。この動作を示すミニ スクリプトを作成しました。
require 'capybara/poltergeist'
require 'capybara/dsl'
include Capybara::DSL
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, :js_errors => false)
end
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
Capybara.default_wait_time = 20
Capybara.ignore_hidden_elements = true
Capybara.current_session.driver.resize(1200, 1000)
visit('http://de.soccerway.com/national/germany/bundesliga/2010-2011/regular-season/r11840/')
# click on button 'per Spieltag'
find(:xpath, ".//a[text() = 'per Spieltag']").click
# drop down menu with matchdays
matchday_selector = find(:xpath, ".//select[@name='page']")
# save screenshot 'before'
save_screenshot('before.png', full: true)
# for demonstration purposes, select option with value '5'
matchday_selector.find(:xpath, ".//option[@value='5']").select_option
# wait some time for ajax call to be complete and save screenshot 'after'
sleep 5
save_screenshot('after.png', full: true)
変更前と変更後のスクリーンショットを比較すると、ドロップダウン メニューの数が変更されていることがわかりますが、テーブルの内容は変更されていません。また、ドロップダウン メニューが正しい位置に表示されず、代わりにスクリーンショットの左上隅に表示されます。
Selenium をデフォルトのドライバーとして使用すると動作しますが、私の経験でははるかに高速であるため、PhantomJS を使用したいと思います。
PhantomJS に Ajax 呼び出しをトリガーさせるにはどうすればよいですか?
PhantomJS 1.9.1、カピバラ 2.1.0、ポルターガイスト 1.3.0 を使用しています。