Как прокрутить вниз в selenium в выпадающем меню

#selenium

#селен

Вопрос:

итак, я довольно новичок в selenium, и я использую его для автоматического заполнения формы посещаемости, которую дает наша школа, в этой форме одна часть — выбрать предмет, и, поскольку список длинный, предмет, который я беру, находится внизу списка. список тем

как вы можете видеть, математика находится внизу, и поскольку selenium не может прокручивать вниз, она выдает эту ошибку

 selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  

я уже искал ответ, но все, что я вижу, это вопросы о том, как прокручивать веб-страницы вниз, а не выпадающее меню,
вот мой текущий код:

 time.sleep(3)
#To select the drop down menu
subject_select = driver.find_element_by_xpath("//*[@id='mG61Hd']/div[2]/div/div[2]/div[6]/div/div/div[2]/div/div[1]/div[1]/div[1]")
subject_select.click()


time.sleep(3)
#To select the subject maths
sub2_select = driver.find_element_by_xpath("//*[@id='mG61Hd']/div[2]/div/div[2]/div[6]/div/div/div[2]/div/div[1]/div[1]/div[19]/span")
sub2_select.click()
  

https://forms.gle/QcCcDcUAhokCxBH89
вот точная копия страницы, которую я сделал для целей тестирования

Несмотря на то, что у класса есть выпадающее меню, поскольку мой класс находится вверху, у меня нет проблем с этим, любая помощь будет оценена.

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

1. Полезно отобразить фрагмент HTML-кода DOM, чтобы мы могли видеть, является ли это «традиционным» полем выбора html или более сложным.

Ответ №1:

Для начала вы можете улучшить свой XPATH (вероятно, вы можете искать элемент, основанный на названии «математика», например:

 //*[@id='mG61Hd']//span[contains(.,'Mathematics')]
  

но в конечном итоге вам может потребоваться перейти к этому элементу:

 #To select the subject maths
sub2_select = driver.find_element_by_xpath("//*[@id='mG61Hd']/div[2]/div/div[2]/div[6]/div/div/div[2]/div/div[1]/div[1]/div[19]/span")

actions = ActionChains(driver)
actions.move_to_element(sub2_select).perform()
sub2_select.click()
  

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

1. я сделал это, но все равно выдает ту же ошибку, я импортировал модуль ActionChains, и он по-прежнему не прокручивается вниз

2. это все еще «элемент, не взаимодействующий»?

3. Интересно, выбираете ли вы неправильный элемент? Можете ли вы опубликовать HTML-код этого выпадающего списка?

4. я исправил это сейчас, проверьте мой ответ, который я опубликовал здесь

Ответ №2:

Итак, после нескольких часов настройки я понял, что, когда вы открываете dropbox и вводите первые несколько букв этого предмета, он автоматически выбирает его, а если вы его не выбираете, форма автоматически выбирает его.

вот окончательный код:

 time.sleep(3)
subject_select = driver.find_element_by_xpath("//*[@id='mG61Hd']/div[2]/div/div[2]/div[6]/div/div/div[2]/div/div[1]/div[1]/div[1]")
subject_select.send_keys("Math")
  

круто было то, что мне не нужна была вторая часть кода.

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

1. Вы не должны использовать sleeps. Кроме того, если вы публикуете HTML, этот процесс идет быстрее.

2. да, я знаю, что я впервые задаю вопрос о selenium, поэтому я понятия не имел, как попросить прощения.