2009-11-14 13 views
17

Pekala, işte anlaşma: İşte bir web sitesinden veri alacağım ve bu verileri bir XML dosyasına toplayacak bir Ruby uygulaması üzerinde çalışıyorum.https aracılığıyla bir web sitesinde oturum açmak için bir Ruby komut dosyası kullanma

Veri almam gereken web sitesinin kullanabileceğim herhangi bir API'si yok, bu yüzden aklıma gelen tek şey web sitesine giriş yapmak, ihtiyacım olan verilere sahip sayfaları sırayla yüklemek. bu durumda, PM'ler; onları arşivlemek istiyorum) ve döndürülmüş HTML'yi ayrıştırın.

Sorun, bir oturum açma oturumunu programlı olarak simüle etmenin herhangi bir yolunu bilmem.

https sayfasına başarılı bir şekilde giriş yapmak için kullanabileceğim herhangi bir kanıtlanmış yöntemle ilgili herhangi bir öğüt alabilir veya daha sonra oturum açtıktan sonra geçici bir tanımlama bilgisi oturumu kullanarak sayfaları siteden yükleyebilir misiniz? Sadece bir Ruby çözümü olmak zorunda değil - sadece bunu nasıl yapabileceğimi bilmek istiyorum. Ve yardımcı olursa, söz konusu web sitesi Microsoft'un .NET Passport hizmetini oturum açma/oturum mekanizması olarak kullanan bir sitedir.

Konuyla ilgili herhangi bir girdi kabul edilir. Teşekkürler.

cevap

36

makineleştirmek

motorize bir web tarayıcısı davranışını imititates yakut kütüphanesidir. Bağlantıları tıklayabilir, formları doldurabilir ve gönderemezsiniz. Hatta bir geçmişi vardır ve çerezleri geri getirir. Problemin mekanize yardımıyla kolayca çözülebiliyor gibi görünüyor.

Aşağıdaki örnek http://mechanize.rubyforge.org alınır: Sadece uzun zamandır karşı karşıya olduğunuz bir sorunu çözmek için bu kullanılan

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

. Teşekkürler! – seaneshbaugh

+0

Harika bir çağrı! Bu bağlantıyı takip edemedim, ancak burada başka temel kullanım örnekleri var: https://github.com/sparklemotion/mechanize/tree/master/examples –

+1

Bazı web sitelerinin javascritp olmadan oturum açamadığı sorunu nasıl çözebilirim, mekanize için javascript'i desteklemiyor. –

0

Sayfayı getirmek için wget'i kullanabilirsiniz. Bu uygulama www.portswigger.net/proxy/ ile giriş sürecini analiz edebilirsiniz.

0

Değeri için Webrat adresini ziyaret edebilirsiniz. Otomatik kabul testleri için bir araç kullanılmalıdır, ancak giriş alanlarını doldurmayı simüle etmek için kullanabilir, daha sonra isimleriyle bağlantıları tıklayabilir ve gerekli HTML'yi bir dize olarak alabilirsiniz. Böyle bir şey yapmayı denemedim, tho.

İlgili konular