【问题标题】:Can't select from a dropdown menu with Selenium and Python无法从 Selenium 和 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>

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

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。它是一个教师评分网站。

标签: python selenium xpath css-selectors html-select


【解决方案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 正在尝试访问它,但现在我收到以下错误:消息:元素
猜你喜欢
  • 2017-03-23
  • 2021-03-13
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2023-03-25
  • 2022-11-11
  • 2017-06-16
  • 1970-01-01
相关资源
最近更新 更多