2011-09-18 23 views
5

html że próbuję zrobić Mechanize parse jest:Python Mechanize: jak wybrać listę rozwijaną, gdy dwa mają taką samą nazwę na stronie internetowej?

<select id="topic_id2" name="topics[]" title="blabla" tabindex="4" class="createSelect"> 
here go options 

Ale wtedy tuż pod nim jest inny rozwijana, za pomocą następującego kodu:

<select id="topic_id3" name="topics[]" title="optional" tabindex="5" class="createSelect"> 

Teraz, jeśli to pomaga w ogóle Nie potrzebuję wybierać żadnej wartości z drugiej, ponieważ jest opcjonalna.

Kiedy próbuję

br = mechanize.Browser() 
br.select_form(name="form") 
br["topics[]"] = ["Internet"] 

uzyskać:

mechanize._form.AmbiguityError: more than one control matching name 'topics[]' 

Czy istnieje sposób mogę wybrać kontrolę na podstawie jego id, używając mechanize.Browser() (przy zachowaniu wszystkich innych składnia formularza)?

Dzięki

+5

Możesz uzyskać dostęp do elementów sterujących według ich indeksu w formularzu, zobacz tę odpowiedź http://stackoverflow.com/questions/6482308/differentiating-between-html-form-select-items-with-the-same-name/ 6483458 # 6483458 – cerberos

+0

Wielkie dzięki, działało. –

+0

Czy możesz dać +1 odpowiedzi w linku? – cerberos

Odpowiedz

1

Dokumentacja zewnętrzna dla mechanize jest dość mały i zawiera tylko kilka przykładów, ale dokumentacja w-kod jest znacznie bardziej rozległe.

Nie przetestowane, z instancją HTMLForm o nazwie form, powinieneś być w stanie zadzwonić pod numer form.find_control(id="topic_id3") i uzyskać to, co chcesz. Nie jestem pewien, jak to zrobić z tylko obiektem Browser, ale czy próbowałeś już br.find_control(id="topic_id3")?

Powiązane problemy