如何使用Selenium和Python从下拉菜单中选择项目?

2024-05-14 13:34:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个下拉菜单,需要根据其值选择一个项目。 假设我要选择值“50.0” enter image description here

表格的完整HTML位于文章末尾: 下面的代码可以基于ID工作(但问题是每次我重新加载页面时,ID都会更改,因此我必须在代码中更新它)

                width = browser.find_element_by_css_selector("#linemodechannelwidth > tbody > tr > td.dijitReset.dijitStretch.dijitButtonContents > div.dijitReset.dijitInputField.dijitButtonText > span")
                actions3 = ActionChains(browser)
                actions3.click(width).perform()
                time.sleep(4)
                spacing50 = browser.find_element_by_css_selector('#dijit_MenuItem_27_text')
                spacing50.click()

根据值而不是ID从下拉框中选择值50.0的代码应该是什么

以下是此下拉菜单的HTML:

<table class="dijit dijitReset dijitMenuTable dijitSelectMenu dijitValidationTextBoxMenu dijitMenu dijitMenuPassive" role="listbox" tabindex="0" cellspacing="0" id="linemodechannelwidth_menu" widgetid="linemodechannelwidth_menu" style="top: 0px; visibility: visible;" aria-labelledby="linemodechannelwidth">
          <tbody class="dijitReset" data-dojo-attach-point="containerNode"><tr class="dijitReset dijitMenuItem" data-dojo-attach-point="focusNode" role="option" tabindex="-1" id="dijit_MenuItem_27" aria-label="50.0 " aria-disabled="false" widgetid="dijit_MenuItem_27" aria-selected="false" style="user-select: none;">
          <td class="dijitReset dijitMenuItemIconCell" role="presentation">
                         <span role="presentation" class="dijitInline dijitIcon dijitMenuItemIcon dijitNoIcon" data-dojo-attach-point="iconNode"></span>
          </td>
          <td class="dijitReset dijitMenuItemLabel" colspan="2" data-dojo-attach-point="containerNode,textDirNode" role="presentation" id="dijit_MenuItem_27_text">50.0</td>
          <td class="dijitReset dijitMenuItemAccelKey" style="display: none" data-dojo-attach-point="accelKeyNode" id="dijit_MenuItem_27_accel"></td>
          <td class="dijitReset dijitMenuArrowCell" role="presentation">
                         <span data-dojo-attach-point="arrowWrapper" style="visibility: hidden">
                                       <span class="dijitInline dijitIcon dijitMenuExpand"></span>
                                       <span class="dijitMenuExpandA11y">+</span>
                         </span>
          </td>
37.5 + 62.5 + 75 + 87.5 +

Tags: iddatastyleclassroletdpointdojo
2条回答
from selenium.webdriver.remote.webelement import WebElement

### Find the table first 

table = browser.find_element_by_css_selector(
'table.dijit.dijitReset.dijitMenuTable.dijitSelectMenu.dijitValidationTextBoxMenu.dijitMenu.dijitMenuPassive'
)

### Loop through all td in the table
for td in table.find_elements_by_tag_name('td'):
    assert isinstance(td, WebElement)
    ### If the text value cast to int is 50 click and break.
    if int(td.text) == 50:
        td.click()
        break

    

例如:假设下拉列表的id为“12345”

还有:

< option value="x"> A < /option> 
< option value="y"> B < /option>
< option value="z"> C < /option>

首先捕获selenium中的选项: =>options\u list=newselect(driver.findElement(By.id(“1234”))

如果您想通过可见下拉项进行选择:(让我们说“A”) =>选项列表。选择ByVisibleText(“A”)

如果您想通过下拉列表编号选择项目(比如第二个项目) =>选项列表。选择索引(1)

相关问题 更多 >

    热门问题