2009-11-14 78 views
17

好的,下面是dealio:我正在開發一個Ruby應用程序,它將從網站獲取數據並將這些數據聚合到一個XML文件中。使用Ruby腳本通過https登錄到網站

我需要從中獲取數據的網站沒有任何我可以使用的API,因此我唯一能想到的就是登錄到網站,按順序加載具有我需要的數據的頁面(在這種情況下,PMs;我想歸檔它們),然後解析返回的HTML。

但問題是我不知道任何編程模擬登錄會話的方法。

任何人都不會有任何建議,或知道我可以用來成功登錄到https頁面的任何已證實的方法,然後使用來自登錄名的臨時cookie會話以編程方式從網站加載頁面嗎?它不必是一個純Ruby解決方案 - 我只是想知道我該如何做到這一點。如果它有幫助,那麼這個網站就是使用Microsoft的.NET Passport服務作爲其登錄/會話機制的網站。

歡迎就此事提供任何意見和建議。謝謝。

回答

36

機械化

機械化是模仿網絡瀏覽器的行爲的紅寶石庫。您可以點擊鏈接,填寫表格並提交。它甚至有歷史和記憶餅乾。看起來你的問題可以在機械化的幫助下輕鬆解決。

下面的例子是從http://mechanize.rubyforge.org採取:

require 'rubygems' 
require 'mechanize' 

a = Mechanize.new 
a.get('http://rubyforge.org/') do |page| 
    # Click the login link 
    login_page = a.click(page.link_with(:text => /Log In/)) 

    # Submit the login form 
    my_page = login_page.form_with(:action => '/account/login.php') do |f| 
    f.form_loginname = ARGV[0] 
    f.form_pw   = ARGV[1] 
    end.click_button 

    my_page.links.each do |link| 
    text = link.text.strip 
    next unless text.length > 0 
    puts text 
    end 
end 
+0

我只是用這個來解決我一直面臨着很長一段時間的問題。謝謝! – seaneshbaugh 2011-10-16 09:55:31

+0

太好了!我無法遵循該鏈接,但是這裏還有其他基本用法示例:https://github.com/sparklemotion/mechanize/tree/master/examples – 2014-06-25 00:28:02

+1

如何解決某些網站無法在沒有javascritp的情況下登錄的問題,機械化不支持JavaScript。 – 2016-04-29 07:24:01

0

您可以嘗試使用wget來獲取頁面。您可以使用此應用分析登錄過程www.portswigger.net/proxy/。

0

對於什麼是值得的,你可以查看Webrat。它意味着被用於自動驗收測試的工具,但我認爲你可以用它來模擬填寫登錄字段,然後點擊鏈接的名稱,並以字符串形式獲取所需的HTML。沒有嘗試過像這樣的事情,壽。