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

问题描述

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

char*

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

<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>

,但我仅假定该方法有效,因为代码可以运行并且不会给出任何错误。但是,我仍然无法从下拉菜单中选择任何内容。我尝试过:

  • find_element_by_xpath /名称/ id /标签/值/文本
  • select_mp.select_by_value('2')
  • select_mp.select_by_visible_text('2')
  • select_mp.select_by_index(2)
  • driver.find_element_by_xpath(“ //选择[@ name ='MP'] / option [@ value ='4']”)。click()
  • driver.find_element_by_xpath(“ // option [@ value ='4']”)。click()
  • driver.find_element_by_id('averagesMP')。click()

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

一些有用的信息:

  • 我正在使用Safari和SafariDriver

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

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

解决方法

要使用Selenium选择文本为 2 <option>,则需要为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