2011-09-24 11 views
6

Gerçekten kafam karıştı. Temel olarak python için mekanize edilmiş bir web sitesinde bir form doldurmaya çalışıyorum. Açılır menü hariç herşeyi çalışıyorum. Onu seçmek için ne kullanırım ve değere ne koyarım? Seçimin adını veya sayısal değerini yazmam gerekip gerekmediğini bilmiyorum. Yardım çok takdir edilecektir, teşekkürler.Python'da mekanize etmek için açılır menü için bir öğe nasıl seçilir?

Kod pasajı: Ben bir açılan menü taşıyıcı sorun yaşıyorum

try: 
     br.open("http://www.website.com/") 
     try: 
      br.select_form(nr=0) 
      br['number'] = "mynumber" 
      br['from'] = "[email protected]" 
      br['subject'] = "Yellow" 
      br['carrier'] = "203" 
      br['message'] = "Hello, World!" 
      response = br.submit() 
     except: 
      pass 
    except: 
     print "Couldn't connect!" 
     quit 

.

+0

Lütfen somut bir örnek verin. Denediğin kodu ve denediğinde ne olduğunu göster? – infrared

+0

Tamam, şimdi gönderiyor – user962889

+0

Sorunun bir özeti olmak için soru başlığınızı bir etiket listesi olarak görünecek yerine (etiket listesi bunun için değil) yerine yeniden yazmanız gerekirse muhtemelen daha iyi bir yanıt alırsınız. Ve “Lütfen Yardım Edin!” Demeye gerek yok, çünkü bir soru soruyorsanız, açıkça yardım istiyorsun. –

cevap

3

mechanize documentation examples, browser nesnesinin form nesnesinin özniteliklerine erişmeniz gerekir. Ayrıca, seçme kontrolü için, bir listeye değerini ayarlamanız gerekir: uzun ölü yazı canlandırılması için

br.open("http://www.website.com/") 
br.select_form(nr=0) 
form = br.form 
form['number'] = "mynumber" 
form['from'] = "[email protected]" 
form['subject'] = "Yellow" 
form['carrier'] = ["203"] 
form['message'] = "Hello, World!" 
response = br.submit() 
+0

Yanıtlayacağınızdan emin değilim, çünkü bunu dün sordum, ancak "taşıyıcı" için değeri aşağı açılır listede ne de değerin adıyla değiştirebilir miyim? örn: Ad: Foo Değer: 129 – user962889

+0

Söz konusu formun html'sini gönderebilir misiniz, böylece düzgün bir şekilde test edebilir ve cevap verebilirim? – infrared

2

Maalesef bu ben google bulabildiğim hala en iyi cevap oldu ve öyle değil iş. İtiraf etmekten daha fazla zaman geçtikten sonra anladım. Kızılötesi form nesnesi hakkında haklıdır, ancak geri kalanı hakkında değildir ve onun kodu çalışmaz. İşte benim için çalışan bazı kodlar (yine de daha zarif bir çözümün varlığına eminim):

# Select the form 
br.open("http://www.website.com/") 
br.select_form(nr=0) # you might need to change the 0 depending on the website 

# find the carrier drop down menu 
control = br.form.find_control("carrier")  

# loop through items to find the match 
for item in control.items: 
    if item.name == "203": 

    # it matches, so select it 
    item.selected = True 

    # now fill out the rest of the form and submit 
    br.form['number'] = "mynumber" 
    br.form['from'] = "[email protected]" 
    br.form['subject'] = "Yellow" 
    br.form['message'] = "Hello, World!" 
    response = br.submit() 

    # exit the loop 
    break 
+0

Döngü yapmak yerine control.disabled = False control.value = ["203"] yapabilirsiniz. Bilmeme izin ver – Lazik

İlgili konular