2011-09-24 11 views
6

Jestem NAPRAWDĘ zdezorientowany. Zasadniczo próbuję wypełnić formularz na stronie z mechanize dla Pythona. Mam wszystko do pracy, z wyjątkiem menu rozwijanego. Co używam, aby go wybrać i co dodaję do wartości? Nie wiem, czy mam podać nazwę wyboru lub wartość liczbową tego. Pomoc byłaby bardzo ceniona, dzięki.Jak wybrać pozycję do menu rozwijanego z mechanizerem w python?

Fragment kodu:

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 

Mam problemy z nośnikiem, który jest menu rozwijane.

+0

Proszę podać konkretny przykład. Pokaż kod, który wypróbowałeś i co się stało, gdy go wypróbowałeś? – infrared

+0

OK, publikuj ją teraz. – user962889

+0

Prawdopodobnie uzyskasz lepszą odpowiedź, jeśli przepisujesz tytuł pytania na podsumowanie problemu zamiast na listę znaczników (lista znaczników jest tutaj). Nie musisz mówić "Proszę, pomóż!", Ponieważ jeśli zadajesz pytanie, oczywiście potrzebujesz pomocy. –

Odpowiedz

3

Według mechanize documentation examples należy uzyskać dostęp do atrybutów obiektu form, a nie do obiektu browser. Również dla wyboru sterowania, należy ustawić wartość z listy:

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

Nie jestem pewien, czy masz zamiar odpowiedzieć, ponieważ poprosiłem o to wczoraj, ale dla "operatora", czy ustawię wartość nazwy na liście rozwijanej lub wartości? ex: Nazwa: Wartość Foo: 129 – user962889

+0

Czy możesz przesłać html formularza, o którym mowa, aby go przetestować i odpowiedzieć? – infrared

2

Sorry za zabicie długo martwy post, ale to było nadal najlepszą odpowiedzią udało mi się znaleźć na google i nie praca. Po więcej czasu, niż chciałbym przyznać, odkryłem to. podczerwień ma rację co do obiektu formularza, ale nie dotyczy reszty, a jego kod nie działa. Oto kod, który działa dla mnie (choć jestem pewien, że istnieje bardziej eleganckie rozwiązanie):

# 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

Możesz być w stanie zrobić control.disabled = False control.value = ["203"] zamiast pętli. Daj mi znać – Lazik

Powiązane problemy