2017-02-07 3 views
0

Ich bin noch neu bei Python und Selen. Ich möchte eine bestimmte Option aus einem Dropdown auswählen, das in einer HTML-Tabelle enthalten ist. Aber ich kann es nicht zur Arbeit bringen. Was mache ich falsch? Jede Hilfe wird geschätzt?Python und Selen: Wählen Sie eine Option aus dem Dropdown in der Tabelle

Snippet von HTML-Code:

<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> 

Ich habe versucht, die folgenden den Wert "Dummy1"

Python-Code wählen:

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

Was soll ich fehlen oder falsch? Jede Hilfe wird sehr geschätzt.

EDIT

Ich erhalte eine Fehlermeldung auf der IPython Konsole in Anaconda mit Python 3.6:

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

EDIT2

ich geprüft, ob das Problem auf unterschiedliche iframes zurückzuführen ist als erwähnt durch Kommentare und in anderen Fragen hier auf stackoverflow. Ich habe die in dieser https://developer.mozilla.org/en-US/docs/Tools/Working_with_iframes genannte Idee verwendet, um nach iframes zu suchen und versuchte es mit dem Beispiel der Alibabas-Login-Seite. Dort wurden zwei verschiedene Iframes gezeigt. Auf der Seite, die ich mit Selen verwenden möchte, gibt es nur einen iframe.

+1

Haben Sie irgendwelche Ausnahmen erhalten? Share logs – Andersson

+0

Ja, ich bekomme eine Ausnahme, siehe oben EDIT. Ich denke, es sagt mir, dass es auf der Seite, die ich öffne, kein solches Element gibt, was ich nicht verstehe. Ich bin noch ziemlich neu, jede Hilfe würde wirklich geschätzt werden. – rashid

+0

Code sieht gut aus. Ist die Seite wirklich geladen? –

Antwort

0

Es scheint, Webdriver hat Schwierigkeiten, direkt auf das Dropdown-Menü mit seiner ID zu erreichen. Möglicherweise müssen Sie zuerst die Tabelle suchen und dann zum Dropdown-Menü gelangen. Versuchen Sie zu folgen und lassen Sie mich wissen, ob es funktioniert.

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") 
+0

Hallo Mahipal, danke. Ich habe versucht und bekomme keinen Fehler, aber der Code, den Sie vorgeschlagen haben, wählt ein weiteres Dropdown in der Tabelle aus, das dritte Dropdown. Ich bin 100% sicher, obwohl die ID und der Name oben das erste Dropdown der Tabelle enthält. Außerdem sollte ich meinen Code auf 'Browser ändern.find_element_by_xpath' richtig? Ich nahm den "Treiber" heraus – rashid

+1

Sorry Rashid, es war ein Tippfehler. Ja, Sie sollten den Code in "browser.find_element_by_xpath" ändern. Ich habe meine Antwort geändert, um das erste Dropdown auszuwählen. Könnten Sie das versuchen und lassen Sie mich wissen, ob es funktioniert? – Mahipal

+0

Hallo Mahipal, danke für die nochmalige Antwort. Ich habe den Code ausprobiert, er wählt irgendwie das Dropdown in der dritten Zeile statt des Dropdown in der ersten Zeile. Das ist komisch, weil das dritte in einer anderen Zeile ist '' mit einer anderen ID: '