2012-01-17 5 views
5

Bu, Python ile programlama konusundaki ilk deneyimim ve this web sayfasına giriş yapmaya çalışıyorum. Etrafta aradıktan sonra birçok insanın mechanize'u kullanarak önerdiğini gördüm. Sadece kodları almadan önce işleri doğru şekilde kurduğumdan emin olmak için web sitesinden mechanize zip dosyasını indirdim ve python betiğimi unzipped mechanize klasörüne aldım.Web sayfasına giriş yapmak için mekaniği kullan

import mechanize 

theurl = 'http://voyager.umeres.maine.edu/Login' 
mech = mechanize.Browser() 
mech.open(theurl) 

mech.select_form(nr=0) 
mech["userid"] = "MYUSERNAME" 
mech["password"] = "MYPASSWORD" 
results = mech.submit().read() 

f = file('test.html', 'w') 
f.write(results) 
f.close() 

Ben kimliği/parola formu için doğru isimler olduğuna inanıyoruz web sayfasının kaynağına bakarak:

Bu kod şimdiye kadar bulduğum farklı örneklerle var. Komut dosyasını IDLE'da çalıştırdığımda, zaman aşımı hatası ve bir robot hatası gibi bir sürü hata alıyorum. Tam geri dönüş: enter image description here Kod çalışsa bile ne beklemem gerektiğinden tam olarak emin değilim. Giriş, sınıf klasörler içeren okul e-postalarım için de geçerlidir. Başarımı bitirmeye çalıştığım oyunun sonu, bir keresinde hesabıma giriş yapmak için bazı klasörleri ayrıştırmak ve daha sonra json veya RSS beslemesine dönüştürülebilen bir dosyada saklamak istedim, ama bu çok daha aşağıda Python'u daha iyi anlayabilmenin yolu, neyi başarmak istediğime dair daha net bir fikir vermeye çalışıyor.

+0

Makineyi 'pip' kullanarak kurmalısınız. – Acorn

+0

"Bir zaman aşımı hatası ve bir robot hatası da dahil olmak üzere bir sürü hata alıyorum." Çok yararlı değil. Tam bir geri izleme sağlayın. –

+0

Ayrıca, çerezleri saklamak için 'CookieJar' kullanmanız gerekebilir. Aksi halde girişinizin 'mechanize.Browser' nesnesi üzerinde bir etkisi yoktur. –

cevap

4

sorun makineleştirmek Sen kapatmak gerekir robots.txt

saygı olmasıdır.

Çözüm:

mech = mechanize.Browser() 
// needs to be set before you call open 
mech.set_handle_robots(False) 

Düzenleme: site Javascript üzerinden oluşturulan ek POST değerleriyle çeşit kullanıyor gibi görünüyor. Bu kendini yeniden yaratmak için bir acı olabilir, neler olduğunu görmek için sayfanın kaynağını kontrol edin. Gerçek POST değerleri gönderiliyor:

challenge [a14b1f67-11edcc01] 
charset UTF-8 
login Login 
origurl /Login/ 
password  
savedpw 0 
sha1 3f77d1e8c2ab0470ef8005a85f5f9c0d7aeedba6 
userid sdsads 
+0

Bu, tüm hataları çözdü. Ama şimdi senaryoyu çalıştırdıktan sonra orada herhangi bir bilgi gösterilmiyor. Dizine bir test.html dosyası yazması gerektiği izlenimim var ancak hiçbiri yok. – Nick