如何使用python3在下拉菜单中选择特定元素?

时间:2019-03-10 16:32:13

标签: python-3.x selenium select drop-down-menu

很抱歉,如果我重复我的问题。我进行搜索并尝试实现对问题的发现,但是找不到适合我的情况的东西。 就是这样:我正在尝试单击下拉菜单中的特定元素。下拉菜单的html如下所示:

</div>
                            </div>
                        </div>
                        <div class="td col15">
                            <div>
                                Cantone
                            </div>
                            <div class="RadAjaxPanel" id="ctl00_MainContent_ctl00_MainContent_ddl_cantonsPanel">
        <div id="ctl00_MainContent_ddl_cantons" class="RadComboBox RadComboBox_Default" style="width:160px;">
            <table summary="combobox" style="border-width:0;border-collapse:collapse;">
                <tr class="rcbReadOnly">
                    <td class="rcbInputCell rcbInputCellLeft" style="width:100%;"><input name="ctl00$MainContent$ddl_cantons" type="text" class="rcbInput radPreventDecorate" id="ctl00_MainContent_ddl_cantons_Input" value="" readonly="readonly" /></td><td class="rcbArrowCell rcbArrowCellRight"><a id="ctl00_MainContent_ddl_cantons_Arrow" style="overflow: hidden;display: block;position: relative;outline: none;">select</a></td>
                </tr>
            </table><div class="rcbSlide" style="z-index:6000;"><div id="ctl00_MainContent_ddl_cantons_DropDown" class="RadComboBoxDropDown RadComboBoxDropDown_Default " style="display:none;"><div class="rcbScroll rcbWidth" style="width:100%;"><ul class="rcbList" style="list-style:none;margin:0;padding:0;zoom:1;"><li class="rcbItem"></li><li class="rcbItem">AG</li><li class="rcbItem">AI</li><li class="rcbItem">AR</li><li class="rcbItem">BE</li><li class="rcbItem">BL</li><li class="rcbItem">BS</li><li class="rcbItem">FR</li><li class="rcbItem">GE</li><li class="rcbItem">GL</li><li class="rcbItem">GR</li><li class="rcbItem">JU</li><li class="rcbItem">LU</li><li class="rcbItem">NE</li><li class="rcbItem">NW</li><li class="rcbItem">OW</li><li class="rcbItem">SG</li><li class="rcbItem">SH</li><li class="rcbItem">SO</li><li class="rcbItem">SZ</li><li class="rcbItem">TG</li><li class="rcbItem">TI</li><li class="rcbItem">UR</li><li class="rcbItem">VD</li><li class="rcbItem">VS</li><li class="rcbItem">ZG</li><li class="rcbItem">ZH</li></ul></div></div></div><input id="ctl00_MainContent_ddl_cantons_ClientState" name="ctl00_MainContent_ddl_cantons_ClientState" type="hidden" />
        </div>
    </div>

我尝试了下面的代码,但是单击某些元素会导致错误的单击(单击其他元素会导致正确的单击)。换句话说,这不是一个非常精确的选择。这是代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select

# Open the website in chrome
url = 'http://www.asca.ch/Partners.aspx?lang=it'
driver = webdriver.Chrome()
driver.get(url)

# Click the dropdown
cantone = driver.find_element_by_xpath("""//*[@id="ctl00_MainContent_ddl_cantons_Input"]""")
cantone.click()

#find all canotenes in the dropdown list. Omit the first empty entry.
dropdown_list = driver.find_elements_by_xpath("""//div[@id='ctl00_MainContent_ddl_cantons_DropDown']/div/ul[@class='rcbList']/li[@class='rcbItem']""")

cantone_list=[]
for l in dropdown_list:
cantone_list.append(l.text)

cantone.send_keys("AI")
cantone.send_keys(Keys.ENTER)

在我的代码中,我试图单击找到的第一个元素(AI),但是它选择了AG而不是AI。我不知道我在做什么错。 请帮忙吗?

2 个答案:

答案 0 :(得分:0)

请尝试以下代码。

dropdown_list = driver.find_elements_by_xpath("//div[@id='ctl00_MainContent_ddl_cantons_DropDown']/div/ul[@class='rcbList']/li")
print(len(dropdown_list))
for l in range(len(dropdown_list)):

  if "AI" in dropdown_list[l].text:
     time.sleep(1)
     dropdown_list[l].click()
     break

答案 1 :(得分:0)

如果要选择“ AI”,只需添加此步骤。

driver.find_element_by_xpath("//div[@id='ctl00_MainContent_ddl_cantons_DropDown']//li[.='AI']").click()

这将直接有效地选择“ AI”。