python - 如何使用 Selenium 在 python 中选择下拉菜单
问题描述
我想知道如何从网站的下拉列表中选择选项。
html在这里
<thead>
<td style="width: 40%;">
<select name="product_size" id="sct-size" data-md-selectize>
<option value="-">Choose Size</option>
<option value="323">XS</option>
<option value="324">S</option>
<option value="325">M</option>
<option value="326">L</option>
<option value="327">XL</option>
<option value="328">XXL</option>
<option value="342">1 years old</option>
<option value="343">5 years old</option>
<option value="344">8 years old</option>
<option value="345">12 years old</option>
</select>
</td>
<td style="width: 40%;">
<select name="product_color" id="sct-color" data-md-selectize>
<option value="-">Choose Color</option>
<option value="594">N/A</option>
</select>
</td>
<td style="width: 19%;"><input type="text" class="md-input" name="product_stock_" id="inp-stock" placeholder="Stock" style="margin-top: -11px;text-align: center;"/></td>
<td style="width: 1%;"><a href="#" id="btn-addstock" style="margin-top: 5px; display: block;" title="Add Stock"><i class="material-icons"></i></a></td>
</thead>
我想选择“选择尺寸”,然后选择“S”选项。我试过这段代码。
from selenium import webdriver
from selenium.webdriver.support.select import Select
mySelect = Select(driver.find_element_by_id("sct-size"))
mySelect.select_by_visible_text("S")
但是得到了错误
NoSuchElementException:消息:找不到具有可见文本的元素:S
我已经在stackoverflow上看过很多关于这个问题的解决方案。它假设从下拉菜单中选择“S”,但没有。我不知道我还能尝试什么。
谢谢。
已经尝试过
- https://sqa.stackexchange.com/questions/12029/how-do-i-work-with-dropdowns-in-selenium-webdriver
- 使用 Python + Selenium 选择下拉菜单
已编辑 1
我也试过
mySelect = Select(driver.find_element_by_id("sct-size"))
mySelect.select_by_value("323")
但收到此错误
NoSuchElementException:消息:找不到具有值的选项:323
我也尝试用名称更改 find_element 方法
obj = Select(driver.find_element_by_name('product_size'))
obj.select_by_index(1)
并得到错误
NoSuchElementException:消息:无法找到索引为 1 的选项
也许 find_element 是问题所在?我不知道。
已编辑 2
我厌倦了在谷歌浏览器中使用“检查”工具,发现当页面加载时,html 只加载 1 个选项(在这种情况下,它的“选择大小”)。这解释了错误的原因。
页面加载时的html代码。
<thead>
<td style="width: 40%;">
<select name="product_size" id="sct-size" data-md-selectize>
<option value="-">Choose Size</option>
</td>
<td style="width: 40%;">
<select name="product_color" id="sct-color" data-md-selectize>
<option value="-">Choose Color</option>
</select>
</td>
<td style="width: 19%;"><input type="text" class="md-input" name="product_stock_" id="inp-stock" placeholder="Stock" style="margin-top: -11px;text-align: center;"/></td>
<td style="width: 1%;"><a href="#" id="btn-addstock" style="margin-top: 5px; display: block;" title="Add Stock"><i class="material-icons"></i></a></td>
</thead>
尝试了 Seema Nair 解决方案,但出现了其他错误
AttributeError:“选择”对象没有“点击”属性
我的新代码是
mySelect = Select(driver.find_element_by_id("sct-size"))
mySelect.click()
mySelect.select_by_visible_text("S")
那么,新问题,我如何点击下拉菜单让选项代码显示?
解决方案
您通过可见文本或值选择的原始代码将起作用。
我遇到了类似的问题,这是因为在从下拉列表中选择值之前,我必须单击下拉链接,然后执行选择。
因此,在 Select 之前添加一个 click 方法,您最初拥有的相同代码将起作用。
推荐阅读
- python - sqlalchemy 中的错误。列表成整数错误
- android - 如何创建渐变边框颜色
- python - 必须将 NCCL dll (Windows 10) 放在哪里才能在 Python 中使用 tensorflow?
- javascript - 反应覆盖中的模态
- android - ADB 更改系统分辨率,但不适用于应用程序
- flutter - 运行颤振时,我不断收到 pubsepc.yaml 错误
- node.js - 对引用 id 相等的文档字段求和
- google-apps-script - 如何在 Google Apps 脚本中使用全局变量?
- node.js - 在 Mongoose 中,使用保存方法重复键错误收集
- actions-on-google - 将应用操作与对话操作进行比较