Python和selenium:从表格中的下拉列表中选择选项

时间:2017-02-07 21:10:43

标签: python selenium-webdriver

我还是Python和Selenium的新手。我想从html表中包含的下拉列表中选择某个选项。但是我无法让它发挥作用。我究竟做错了什么?任何帮助表示赞赏?

HTML代码片段:

<table class="StdTableAutoCollapse">
<tr>
<td class="StdTableTD150">
<span id="ctl00_ContentPlaceBody_LbLProd1" class="StdLabel150">Prod1:</span>
</td>
<td class="StdTableTD330">
<select name="ctl00$ContentPlaceBody$DropDownListUnitType"            onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceBody$DropDownListUnitType\',\'\')', 0)" id="ctl00_ContentPlaceBody_DropDownListUnitType" class="StdDropDownList330" Class="option">
    <option selected="selected" value="#">- nothing -</option>
    <option value="P">Dummy1</option>

</select>
                        </td>
                    </tr>
                    <tr>

我尝试了以下选择值“Dummy1”

Python代码:

dropdown1 =     
browser.find_element_by_id('ctl00_ContentPlaceBody_DropDownListUnitType')
select = Select(dropdown1)
select.select_by_value("P")

我错过了什么或做错了什么?任何帮助深表感谢。

修改

我在使用Python 3.6的Anaconda的IPython控制台上收到错误:

NoSuchElementException: Unable to locate element: 
[id="ctl00_ContentPlaceBody_DropDownListUnitType"]

EDIT2

我检查了问题是否是由于评论中提到的不同iframe以及stackoverflow上的其他问题。我使用了此https://developer.mozilla.org/en-US/docs/Tools/Working_with_iframes中提到的想法来检查iframe,并尝试使用Alibabas登录页面的示例。显示了两个不同的iframe。在我尝试与selenium一起使用的页面中,只有一个iframe。

2 个答案:

答案 0 :(得分:0)

看来,Webdriver难以直接使用 id 来达到下拉列表。您可能需要先找到该表,然后转到下拉列表。请尝试以下操作,让我知道它是否有效。

 dropdown1 =     
 browser.find_element_by_xpath("//table[@class='StdTableAutoCollapse']/tr[1]/descendant::select[@id='ctl00_ContentPlaceBody_DropDownListUnitType'][1]")
 select = Select(dropdown1)
 select.select_by_value("P")

答案 1 :(得分:0)

问题是我试图在Firefox 45中使用Selenium 3.0.2。这会产生问题,因此我无法选择下拉值。我降级到Selenium 2.5.x并且问题消失了。问题不在于我最初想到的选择是在表中。我希望将来能帮助其他人。请参阅以下问题:Python, Firefox and Selenium 3: selecting value from dropdown does not work with Firefox 45