Python Selenium не может выбрать выпадающий список (Chrome Webdriver) - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть элемент выпадающий , я хочу выбрать параметр Все , соответствующий HTML-код:

<div class="dataTables_length" id="indicators_length"> 
  <label>
    <span class="result-mune">
      <span>Results </span>per page:
    </span> 
    <select name="indicators_length" aria-controls="indicators" class="jcf-hidden">
      <option value="25">25</option>
      <option value="50">50</option>
      <option value="100">100</option>
      <option value="200">200</option>
      <option value="-1">All</option>
    </select>
    <span class="jcf-select jcf-unselectable">
      <span class="jcf-select-text">
        <span class="">25</span>
      </span>
      <span class="jcf-select-opener"></span>
    </span>
  </label>
</div>

элемент selectне подсвечивается с помощью браузера Inspect метод, похоже, что это выпадающее меню вызвано js.Я пытался использовать класс Select, описанный здесь :

select = Select(self._wait.until(EC.presence_of_element_located_by((By.XPATH, "//div[@id = 'indicators_length']//select[@name = 'indicators_length']")))
select.select_by_value('-1')

не работает.и метод ActionChain и даже метод execute_script, все не работает.Это очень беспокоит меня, надеюсь, кто-нибудь может помочь.

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

вам на самом деле не нужно выбирать option, просто нажмите span, и он автоматически установит опцию.

driver = webdriver.Chrome()
driver.get("......")

# click "OK, I Agree" cookies
driver.find_element_by_css_selector('.agree-button.eu-cookie-compliance-default-button').click()
# scroll down to make dropdown option visible
driver.find_element_by_css_selector('h4.pane-title').location_once_scrolled_into_view

select = driver.find_element_by_xpath('//span[@class="result-mune"]/following-sibling::span')
select.click()
# wait until javascript generate fake option element because it actually span
time.sleep(1)
select.find_element_by_css_selector('ul li span[data-index="4"]').click()
0 голосов
/ 03 декабря 2018

Я пытался использовать класс Selenium Select, он может найти элемент, но не может выбрать опцию из элемента.Не уверен, что происходит, может быть класс "jcf-hidden" на элементе.

Сказав это, я сделал удар по нему, и ниже мой подход.Попробуйте, это работает на моей системе, вы должны справиться с нажатием кнопки «ОК, я согласен», я сделал это вручную.

import time
from selenium.webdriver import Chrome

driver = Chrome()
driver.get('https://www.topuniversities.com/university-rankings/world-university-rankings/2019')

# Remove this nasty time.sleep and implement webdriver wait
# Handle the OK, I Agree
time.sleep(5)
i_agree = driver.find_element_by_css_selector('button[class*="eu-cookie-compliance-default-button"]')
i_agree.click()


time.sleep(5)
# Open the Select
rankings_length = driver.find_element_by_id('qs-rankings_length')
select_opener = rankings_length.find_element_by_class_name('jcf-select-opener')
select_opener.click()

# loop through the list
select_content = rankings_length.find_element_by_class_name('jcf-list-content')
for content in select_content.find_elements_by_tag_name('li'):
    if content.text == 'All':
        content.click()
0 голосов
/ 03 декабря 2018

попробуйте это:

driver.execute_script('document.getElementsByName("indicators_length")[0].value = 50;

Если он создан и загружен после загрузки страницы, убедитесь, что вы добавили спящий режим, чтобы он отображался;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...