2012-04-07 47 views
1

我想要使用大量javascript來取消網頁。在pguardiano的幫助下,我在ruby中擁有這段代碼。如何避免在javascript中使用網頁抓取時啓動firefox gui

require 'rubygems' 
require 'watir-webdriver' 
require 'csv' 
@browser = Watir::Browser.new 
@browser.goto 'http://www.oddsportal.com/matches/soccer/' 
CSV.open('out.csv', 'w') do |out| 
@browser.trs(:class => /deactivate/).each do |tr| 
    out << tr.tds.map(&:text) 
end 
end 

在大約1小時的睡眠時間的背景下以遞歸方式進行刮取。我沒有紅寶石的經驗,特別是網絡疤痕,所以我有幾個問題。

  1. 我怎樣才能避免每次新的Firefox會話打開很多的CPU和內存消耗?

  2. 是否可以在不使用GUI的情況下使用firefox引擎?

+0

在這裏看到答案http://stackoverflow.com/questions/5370762/how-to-hide-firefox-window-firefox-webdriver – peter 2012-04-07 16:22:19

回答

2

您可以嘗試headless選項。

require 'watir-webdriver' 
require 'headless' 
headless = Headless.new 
headless.start 
b = Watir::Browser.start 'www.google.com' 
puts b.title 
b.close 
headless.destroy 

一種替代方法是使用selenium server。第三個選擇是使用像Kapow這樣的刮刀。

+0

我想你可能會更好使用較低級別的解決方案,如就像HTTP-Party gem發出請求並獲得響應一樣,然後Nokogiri解析HTML。 Watir更適用於網站的功能測試,雖然我可以用來做刮擦,但這不是它的主要目的,所以它可能不是一個理想的解決方案 – 2012-04-08 23:41:39

+0

我同意。如果我想要一個便宜/容易的刮板庫,我會使用Nokogiri的機械化。但是,這並不總是與javascript網站一樣工作,因爲提到了這個問題。 Watir或Watir-Webdriver的確如此。 – 2012-04-09 07:01:22

+0

是的,如果有很多客戶端代碼,你需要一個真正的瀏覽器,或非常非常接近一個。 – 2012-04-10 07:51:17