Я пытаюсь очистить данные курса с веб-сайта: «https://schedule.msu.edu/». После выбора термина, предмета и нажатия кнопки «Найти курсы» появляется список курсов, и при нажатии на каждый курс, например: (курс AAAS 100 в термине: осень 2019 г., предмет: афроамериканские и африканские исследования), появляется всплывающее окно, и я попытался получить данные из всплывающего окна с помощью селена, он выдает исключение, говорящее «NoSuchElementException: сообщение: нет такого элемента: невозможно найти элемент:». Когда всплывающее окно открывается, это другой URL-адрес, но я не могу понять, как получить данные из всплывающего окна. Буду очень признателен за любую помощь в этом вопросе.
Вот пример кода с использованием селена:
driver = webdriver.Chrome()
driver.get("https://schedule.msu.edu/")
check_box=driver.find_element_by_xpath("//*[@id='MainContent_chkAllonePg']").click()
#clicking on the "terms"
term=driver.find_element_by_xpath("//*[@id='MainContent_ddlTerm']")
term.click()
#selecting a term
term_op=driver.find_element_by_xpath("//*[@id='MainContent_ddlTerm']/option[3]")
term_op.click()
#selecting the subject
elem_sub=driver.find_element_by_xpath("//*[@id='MainContent_ddlSubject']").click()
subject=driver.find_element_by_xpath("//*[@id='MainContent_ddlSubject']/option[1]")
subject.click()
#Clicking on 'Find Courses' button
elem_search=driver.find_element_by_xpath("//*[@id='MainContent_btnSubmit']")
elem_search.click()
#Clicking on a course to get the popup
course=driver.find_element_by_xpath("//*[@id='MainContent_divHeader1_va']/h3[1]/a").click()
#Trying to Scrape from the popup
pop_up=driver.find_element_by_xpath("//*[@id='RepeaterMain']/tbody/tr[1]/td/h3")
pop_up.click()





Эти элементы заключены во фрейм, поэтому вам следует сначала переключиться на этот фрейм. Этот код должен работать:
#Clicking on a course to get the popup
course=driver.find_element_by_xpath("//*[@id='MainContent_divHeader1_va']/h3[1]/a").click()
#Trying to Scrape from the popup
#pop_up=driver.find_element_by_xpath("//*[@id='RepeaterMain']/tbody/tr[1]/td/h3")
time.sleep(5)
driver.switch_to.frame(driver.find_element_by_xpath("//*[@id='CourseFrame']"))
#print(driver.page_source)
time.sleep(5)
try:
pop_up=WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, "//*[@id='RepeaterMain']/tbody/tr[1]/td/h3")))
print(pop_up.text)
except NoSuchElementException:
pass
выход:
AAAS 390 Special Topics in Black/Africana Studies
вы должны переключить рамку, прежде чем нажать кнопку закрытия. примерно так: driver.switch_to.default_content()
как вы получили xpath как "//*[@id='CourseFrame']"?
Внутри всплывающего окна есть рамка. Вы должны переключиться на этот фрейм, прежде чем вы сможете получить доступ к элементам внутри фрейма.
Попробуй это :
#Trying to Scrape from the popup
driver.switch_to.frame(driver.find_element_by_id("CourseFrame"))
pop_up=driver.find_element_by_xpath("//*[@id='RepeaterMain']")
print(pop_up.text)
Спасибо, Ахмед, но он выдает NoSuchFrameException, но я понял, что нужно переключать кадры.
Спасибо Huynh, это работает! Любая идея о том, как закрыть всплывающее окно после извлечения данных? Я попытался найти xpath кнопки закрытия и включил ее после оператора print(pop_up.text), но он выдает NoSuchElementException (здесь мы передаем исключение)