2011-12-20 25 views
7

Eh, bir siteye Python kullanarak giriş yapmaya ve mekanize etmeye çalışıyorum.Mekanizma ile Form Gönderme (Python)

site = br.open("http://example.com/login.php") 

Ve (br.forms birlikte) formların listesi var:

Ben sitesi açıldı var.

<GET http://example.com/search.php application/x-www-form-urlencoded 
<HiddenControl(search=1) (readonly)> 
... 
<POST http://example.com/login.php application/x-www-form-urlencoded 
<TextControl(username=)> 
<PasswordControl(password=)> 
<CheckboxControl(stay=[1])> 
<SubmitControl(<None>=Log in) (readonly)>> 

Kullanıcı adı ve parola alanlarını göndermeye çalışıyorum.

br.select_form(nr=0) 
br.form["username"] = 'usernamehere' 
br.form["password"] = 'passwordhere' 
br.submit() 

Sonra ben doldurmaya çalışıyorlardı formlar sayfadaki ilk olmadığını anlayınca, ama 0 şeyle yardım etmedi değişen:

böyle yapıyor çalıştı. Böyle bir sayfada formu seçmek için ne yapmalıyım?

Ancak! Tek sorun bu değil.

Traceback (most recent call last): 
File "C:\Python26\login.py", line 34, in <module> 
br.form["username"] = 'usernamehere' 
... 
ControlNotFoundError: no control matching name 'username' 

nasıl düzeltebilirim: Onu çalıştırdığınızda

, bu hatayı alıyorum? D: Yoksa tamamen yanlış mı yapıyorum? Eğer ikincisiyse, bunu nasıl yapacağım?

cevap

4

adını kullanarak bir form seçmek için kullanmalısınız:

br.select_form(name="order") 

burada ne yaptığını:

br.form["username"] = 'usernamehere' 

, seçili form altındaki bir denetime bir değer koymaya çalışıyor, bu yüzden onu bulamadığında, gördüğünüz istisnayı atar.

+0

br.select_form (name = "kullaniciadi") bir hatayı geri atar: FormNotFoundError: 'username' ismiyle eşleşen bir form yok - daha önce olduğu gibi, ama bu sefer eklediğim satırla. – Matthew

+0

Doğru isme sahip olduğunuzdan emin misiniz? br.forms() formunu deneyin: print form – tovmeod

+0

Pozitif. Br.forms() ve ham html'yi kontrol ettim. – Matthew

0

formu JavaScript kullanılarak oluşturulur eğer birkaç sorunu

  • sahip olabilir, sen mechanize ile çözemezler - en azından düz bir ileri bir şekilde - bu durumda ben denemenizi tavsiye ve selenium'u kullanın - sayfa HTML kaynağına bakmayı deneyebilirsiniz - eğer formunuzda saf html yoksa, DOM'a javascript ile eklenmiş olduğu oldukça açıktır. Form javascript üzerinden gönderildiğinde, ayrıca, sen

  • da form ilk sayfada olmayabilir yardımcı olmaz motorize - Sen yönlendirmeleri takip etmek mekanize belirlemek isteyebilir

+0

Hayır, javascript değil. Ve ben urllib ile formuna ulaşabiliyordum ... Sadece mekaniği kullanmak istiyorum çünkü cookiejar'in tam olarak nasıl çalıştığından emin değilim ve giriş yapmam gerekiyor> _> Ve login.php formun lokasyondur. Bundan eminim. – Matthew

İlgili konular