3

非営利目的で、スクレーパーを作成しようとしています。以前に PhantomJS を使用したことがありますが、通常は魅力的に機能します。ただし、次の問題に遭遇しました。

私がしたいこと:

残念ながら、選択したいオプションを選択できますが、その後何も起こりません。この動作を示すミニ スクリプトを作成しました。

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 を使用しています。

4

0 に答える 0