【问题标题】:Determining what requests happen after UI interaction with Rails, Capybara确定 UI 与 Rails 交互后发生的请求,Capybara
【发布时间】:2013-05-13 17:09:03
【问题描述】:

我正在使用 Capybara 进行网络爬虫,但我面临以下挑战:在与一些 DOM 元素交互(例如单击按钮)后,我想知道(或做出正确的猜测)是否正在加载新页面以及是否有任何 AJAX 请求正在发生。因为我正在抓取我不一定控制的网站,所以我无法访问服务器端状态或不知道会发生什么(即,这不是等待页面加载的问题,而是知道是否它正在发生)。

最好的情况是我可以查询最近/正在进行/已完成的 HTTP 请求列表并从中获取数据。

或者,如果我至少能查明自上次交互后页面是否正在重新加载/是否已重新加载,那就太好了。

至少我可以检查我所在页面的 URL 是否与我以前所在的 URL 匹配,但这会错过 AJAX 请求、页面刷新,并且不会等待页面加载即将发生。寻找比这更好的东西。

我正在寻找与硒一起使用的东西。对于非 AJAX 情况,我希望它也可以与 webkit 一起使用。有什么建议吗?

【问题讨论】:

标签: ruby-on-rails capybara selenium-webdriver


【解决方案1】:

doesn't provide an API to monitor HTTP traffic or to see if page is loading。如果你需要记录 HTTP 请求,你应该使用像 BrowserMob-proxy 这样的代理。

我认为 Selenium tries to block when page is loading 可能对您有所帮助,但并非在所有情况下都会发生(如果 Selenium 在您的情况下阻塞可能会更好)。

如果 Selenium 在您的情况下阻塞,您可以测量单击链接所花费的时间。如果花费的时间超过例如0.1秒,表示点击后正在加载页面。

require 'benchmark'
time = Benchmark.realtime { click_link 'Some link' }
if time > 0.1
  # Looks like page was being loaded after click
end

我不知道 Poltergeist 是否阻塞。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2012-02-22
    • 2013-03-10
    相关资源
    最近更新 更多