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、Capybara 2.1.0 和 Poltergeist 1.3.0

4

0 回答 0