无法从 Selenium 和 Python 的下拉菜单中选择

Posted

技术标签:

【中文标题】无法从 Selenium 和 Python 的下拉菜单中选择【英文标题】:Can't select from a dropdown menu with Selenium and Python 【发布时间】:2020-12-11 04:20:06 【问题描述】:

我真的很难从我要抓取的网站上的下拉菜单中选择一个项目。 html 的代码如下所示:

<select id="averagesMP" name="MP" onchange="reQuery(this);" style="width: 150px">
       <option value="" selected="selected"></option>
       <option value="1">1</option>
       <option value="2">2</option>
       <option value="3">3</option>
       <option value="4">4</option>
       <option value="5">5</option>
</select>

我已经尝试了所有我能想到的并在 *** 上找到的方法!我注意到这似乎可以选择实际的下拉框:

select_mp = Select(driver.find_element_by_xpath("//select[@name='MP']")) 

但我只假设它有效,因为代码运行并且没有给出任何错误。但是,我仍然无法从下拉菜单中选择任何内容。我试过了:

find_element_by_xpath/name/id/tag/value/text select_mp.select_by_value('2') select_mp.select_by_visible_text('2') select_mp.select_by_index(2) driver.find_element_by_xpath("//select[@name='MP']/option[@value='4']").click() driver.find_element_by_xpath("//option[@value='4']").click() driver.find_element_by_id('averagesMP').click()

有人有什么建议吗?我知道这个问题似乎在这里被问了很多,但我已经尝试了我在帖子中看到的所有内容,但它不起作用!它看起来不是一个很复杂的下拉菜单,只是非常难以捉摸。

一些有用的信息:

我正在使用 Safari 和 SafariDriver

我不断收到以下错误消息:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: 

【问题讨论】:

检查下拉菜单是否在 iframe 中?如果没有,那么您可能必须尝试 javascriptexecutor。 它在哪个网站上>? 该网站是 skedula.com。它是一个教师评分网站。 【参考方案1】:

要使用Selenium 选择文本为2&lt;option&gt;,您需要为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下Locator Strategies 之一:

使用CSS_SELECTORselect_by_visible_text()

select = Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select#averagesMP[@name='MP']"))))
select.select_by_visible_text('2')

在一行中使用XPATHselect_by_value()

Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='averagesMP' and @name='MP']")))).select_by_value('2')

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select

【讨论】:

感谢您回复我!看起来使用 XPATH 正在尝试访问它,但现在我收到以下错误:消息:元素

以上是关于无法从 Selenium 和 Python 的下拉菜单中选择的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium Webdriver 和 Python 从这个非选择下拉菜单中选择这个元素

selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等

在 python 中使用 selenium 从下拉菜单中选择多个选项

如何使用 Selenium 和 Python 选择具有 unselectable="on" 属性的剑道下拉元素

selenium python 针对js生成的下拉列表,如何选择隐藏的选项

如何使用来自具有特殊设置的网站的Selenium从下拉列表中选择值 - Python