Ray Huang
Ray Huang

Reputation: 51

Python to select a DropDown menu on a website and submit

I want to select a value from a dropdown menu on a website using Python, the website is: http://web3.dgpa.gov.tw/WANT03FRONT/AP/WANTF00001.aspx?mode=PC

<select id="ctl00_ContentPlaceHolder1_drpWORK_PLACE" class="CDropDownList160PX" name="ctl00$ContentPlaceHolder1$drpWORK_PLACE">
<option value=""></option>
<option value="00">00-不拘</option>
<option value="100">---大台北地區---</option>
<option value="10">10-臺北市</option>
<option value="23">23-新北市</option>
<option value="200">---桃竹苗地區---</option>
<option value="30">30-新竹市</option>
<option value="31">31-新竹縣</option>
<option value="33">33-桃園市</option>
<option value="35">35-苗栗縣</option>
<option value="300">---中彰投地區---</option>
<option value="42">42-臺中市</option>
<option value="50">50-彰化縣</option>
<option value="54">54-南投縣</option>
<option value="400">---雲嘉南地區---</option>
<option value="60">60-嘉義市</option>
<option value="61">61-嘉義縣</option>
<option value="63">63-雲林縣</option>
<option value="72">72-臺南市</option>
<option value="500">---高高屏地區---</option>
<option value="82" selected="selected">82-高雄市</option>
<option value="90">90-屏東縣</option>
<option value="600">-----基宜地區-----</option>
<option value="20">20-基隆市</option>
<option value="26">26-宜蘭縣</option>
<option value="700">-----花東地區-----</option>
<option value="95">95-臺東縣</option>
<option value="97">97-花蓮縣</option>
<option value="800">-----離島地區-----</option>
<option value="21">21-福建省連江縣</option>
<option value="88">88-澎湖縣</option>
<option value="89">89-金門縣</option>
</select>

I want to select

<option value="82" selected="selected">82-高雄市</option>

then submit it using Python, here is my code so far:

from mechanize import Browser
br = Browser()
br.open("http://web3.dgpa.gov.tw/WANT03FRONT/AP/WANTF00001.aspx?mode=PC")
br.select_form(nr=0)

Update: Can select person kind dropdown and work place dropdown now.

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from mechanize import Browser

br = Browser()
br.set_handle_robots(False)
br.open("http://web3.dgpa.gov.tw/WANT03FRONT/AP/WANTF00001.aspx?mode=PC")
br.select_form("aspnetForm")

# select work place
control = br.form.find_control("ctl00$ContentPlaceHolder1$drpWORK_PLACE")

for item in control.items:
    # item.name
    # 63 == 雲林, 82 == 高雄
    if item.name == "82":
        item.selected = True

# select person kind
control = br.form.find_control("ctl00$ContentPlaceHolder1$drpPERSON_KIND")
for item in control.items:
    if item.name == "11":
        item.selected = True

# fill in 職系 textfield
br['ctl00$ContentPlaceHolder1$txtSYSNAM'] = "一般行政"

html = (br.submit()).read()
print html

Upvotes: 1

Views: 4424

Answers (1)

Mehdi
Mehdi

Reputation: 4318

I think you can find your answers in the form documentation. Based on documentation value of select controls must be a list even if it's single value select. If you just want to set an item to select this might be helpful.

from mechanize import Browser
br = Browser()
br.open("http://web3.dgpa.gov.tw/WANT03FRONT/AP/WANTF00001.aspx?mode=PC")

# walk through each input control in the form:
for control in br.select_form(nr=0):
    # find the intended <select>
    if control.type=="select" and control.name=="ctl00$ContentPlaceHolder1$drpWORK_PLACE":
        # the value must be a list. because select is a list.
        control.value = ["82"]
        for item in control.items:
            if item.value == "82":
                item.selected = True
            else:
                item.selected = False

Upvotes: 1

Related Questions