2009-11-14 6 views
17

Alles klar, also hier ist das Dealio: Ich arbeite an einer Ruby-App, die Daten von einer Website nimmt und diese Daten in eine XML-Datei aggregiert.Verwenden eines Ruby-Skripts zum Anmelden bei einer Website über https

Die Website, die ich brauche, um Daten von zu haben, hat keine APIs, die ich verwenden kann, so das einzige, was ich denken kann, ist auf der Website einzuloggen, nacheinander die Seiten laden, die die Daten haben, die ich brauche In diesem Fall, PMs; Ich möchte sie archivieren) und dann den zurückgegebenen HTML-Code analysieren.

Das Problem ist jedoch, dass ich keine Möglichkeiten kenne, eine Login-Sitzung programmatisch zu simulieren.

Hätte jemand einen Rat oder bewährte Methoden, mit denen ich erfolgreich auf einer HTTPS-Seite anmelden und dann Seiten von der Website mithilfe einer temporären Cookie-Sitzung von der Anmeldung programmatisch laden kann? Es muss keine Ruby-only-Lösung sein - ich will nur wissen, wie ich das wirklich machen kann. Und wenn es hilft, ist die fragliche Website eine, die den Microsoft .NET Passport-Dienst als Login/Session-Mechanismus verwendet.

Jeder Beitrag zu der Sache ist willkommen. Vielen Dank.

Antwort

36

Mechanize

Mechanize ist Ruby-Bibliothek, die das Verhalten eines Web-Browsers imititates. Sie können auf Links klicken, Formulare ausfüllen und abschicken. Es hat sogar eine Geschichte und erinnert Cookies. Es scheint, dass Ihr Problem mit Hilfe von Mechanisieren leicht gelöst werden könnte.

Das folgende Beispiel aus http://mechanize.rubyforge.org genommen:

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

ich dies nur verwendet, um ein Problem zu lösen, ich habe für eine lange Zeit gegenüber. Vielen Dank! – seaneshbaugh

+0

Toller Anruf! Ich konnte diesem Link nicht folgen, aber es gibt andere grundlegende Anwendungsbeispiele hier: https://github.com/sparklemotion/mechanize/tree/master/examples –

+1

So lösen Sie das Problem, dass einige Websites nicht ohne javascritp anmelden können, für Mechanize unterstützt Javascript nicht. –

0

Sie können versuchen, wget zum Abrufen der Seite zu verwenden. Sie können den Anmeldevorgang mit dieser App analysieren www.portswigger.net/proxy/.

0

Für was es wert ist, können Sie Webrat überprüfen. Es ist gedacht, um ein Werkzeug für automatisierte Akzeptanztests zu verwenden, aber ich denke, dass Sie es verwenden könnten, um das Ausfüllen der Login-Felder zu simulieren, klicken Sie dann durch die Links nach ihren Namen und greifen Sie auf das benötigte HTML als String zu. Habe nicht versucht, so etwas zu tun, tho.

Verwandte Themen