выбор python selenium из выпадающего меню

#python #selenium

#python #selenium

Вопрос:

Я пытаюсь выбрать опцию «Номер CAS» на этом веб-сайте. Читая другие сообщения, я написал несколько кодов на Python с использованием Selenium

 driver.find_element_by_css_selector("select#selectbox > option[value='cas']").click()

driver.find_element_by_xpath("//select[@id ='selectbox']/option[@value ='cas']").click()

box = driver.find_element_by_id('selectbox')
    for option in box.find_elements_by_tag_name('option'):
    if option.text == 'cas':
    option.select()
  

Но все они не могут выбрать соответствующее поле. Итак, мне интересно, в чем проблема.

Ответ №1:

После проверки DOM этого веб-сайта, <select id="selectbox" name="focus" style="display: none;"> это не тот, который люди видят в пользовательском интерфейсе.

Фактическое выпадающее меню:

 <div id="selectbox_container" class="selectbox-wrapper" style="display: none; width: 150px;">
   <ul>
      <li id="selectbox_input_product" class="selected">Product Name or Number</li>
      <li id="selectbox_input_cas">CAS Number</li>
      <li id="selectbox_input_mdl">MDL Number</li>
      <li id="selectbox_input_msds">MSDS</li>
      <li id="selectbox_input_cofa">Certificate of Analysis</li>
      <li id="selectbox_input_formula">Molecular Formula</li>
      <li id="selectbox_input_keyword">Keyword</li>
   </ul>
</div>
  

Поэтому, пожалуйста, попробуйте следующий код:

 driver = webdriver.Chrome()
driver.get("http://www.strem.com/")

driver.find_element_by_id("selectbox_input").click()
driver.find_element_by_id("selectbox_input_cas").click()
  

Комментарии:

1. большое вам спасибо за ваше любезное разъяснение. этот код отлично работает! не могли бы вы объяснить, как я могу определить, что люди на самом деле видят в пользовательском интерфейсе?

2. уммммм … и вы, и предыдущий пользователь дали мне похожие коды, которые работают, поэтому я надеюсь, вы не будете возражать, если я дам «чек» alecxe >_<. Я действительно ценю всю помощь, которую вы оказываете мне в моем путешествии по Python!!!!

3. @user3788728: Все в порядке. алекс ответил за минуту до меня. ;(. Вы все еще можете поддержать меня, нажав стрелку вверх. Спасибо. Вы можете использовать Firebug или Chrome Developer Tool для проверки DOM и определения структуры.

Ответ №2:

Сначала нажмите на input , затем выберите нужный вам элемент списка. Например, для CAS Number :

 from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://www.strem.com')

element = driver.find_element_by_id('selectbox_input')
element.click()

li = driver.find_element_by_id('selectbox_input_cas')
li.click()
  

Обратите внимание, что это не обычный select тег, которым можно было бы намного проще управлять с помощью selenium.webdriver.support.select.Select.

Комментарии:

1. я вижу. итак, мне нужно сначала щелкнуть открыть выпадающее меню, прежде чем выбирать интересующий элемент. Большое вам спасибо за вашу помощь. Код работает!

2. когда вы сказали, что «это не обычный тег выбора», вы имеете в виду тот факт, что нам нужно сначала щелкнуть открыть поле выбора, прежде чем выбирать интересующий элемент? Я не знаю, когда я могу его использовать, а когда нет. Спасибо.

3. @user3788728 да, это в основном div со списком внутри. Фактический select скрыт и используется под капотом. Нет ничего плохого в использовании решения в ответе. Это в основном то же самое, что вы делаете вручную в браузере.

4. О, я понимаю. Теперь это имело больше смысла. Это то, что означает li. Вчера у нас с другом были трудные времена, и мы исследовали, как использовать xpath в разделе li. Этот способ проще в использовании и понимании. Еще раз спасибо!!

Ответ №3:

 theMenu = self.browser.find_element_by_link_text('Title of Menu')
theMenu.click()
menuItem = self.browser.find_element_by_link_text('Title of Menu Item')
menuItem.click()