python - 如何使用 Selenium 和 Python 从下拉菜单中选择项目?
问题描述
我有一个下拉菜单,需要根据其值选择一个项目。假设我想选择值“50.0”
表格的完整 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。0 + 87.5 +
解决方案
例如:假设下拉列表的 id 为“12345”
并且有:
< option value="x"> A < /option>
< option value="y"> B < /option>
< option value="z"> C < /option>
首先捕获 selenium 中的选项: => options_list = new Select(driver.findElement(By.id("1234")));
如果您想通过可见的下拉项进行选择:(可以说“A”)=> options_list.selectByVisibleText("A")
如果你想通过下拉数字选择项目(让我们说第二个项目)=> options_list.selectByIndex(1)
推荐阅读
- java - 使用带有 Lombok Annotations 的 OpenAPI 生成器生成 POJO
- r - 用 dplyr 和 mutate 解码表的漂亮解决方案
- flutter - 我如何放置条件语句以根据颤动中的用户类型验证脚手架中 FloatingActionButton 的视图?
- python - 如何强制和编辑 pyplot 子图的主要和次要日志图刻度
- python-3.x - 系统在python中找不到文件指定错误
- wordpress - 我遇到了将全局颜色设置为默认 Elementor 小部件开发的问题
- reactjs - 如何根据两个输入字段向渲染按钮添加条件检查?
- drake - 在不设置 LeafSystem 的输出端口的情况下继续模拟
- ios - 如何像 Safari 一样向 iOS 共享表添加额外选项
- flutter - 在 Windows 上更改 Flutter 应用程序的任务栏名称