1

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

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

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

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

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

4

1 回答 1

1

Selenium不提供 API 来监控 HTTP 流量或查看页面是否正在加载。如果你需要记录 HTTP 请求,你应该使用BrowserMob-proxy 之类的代理。

我认为 Selenium在页面加载时尝试阻止可能对您有所帮助,但并非在所有情况下都会发生(如果 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 是否阻塞。

于 2013-05-12T17:52:12.577 回答