Webscraping из всплывающих окон с использованием Python Selen - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь почистить данные курса с веб-сайта: 'https://schedule.msu.edu/'. После выбора термина, темы и нажатия кнопки «Найти курсы» появляется список курсов и при нажатии на каждый курс Например: (курс AAAS 100 в термине: осень 2019 г., предмет: Афроамериканские и африканские исследования), появляется всплывающее окно, и я пытался получить данные из всплывающего окна с использованием селена, оно выдает исключение, говорящее «NoSuchElementException: Сообщение: нет такого element: Невозможно найти элемент: ". Как только всплывающее окно открывается, это другой 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()

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Внутри модального окна есть рамка.Вы должны переключиться на этот фрейм, прежде чем сможете получить доступ к элементам внутри фрейма.

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

#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)
0 голосов
/ 30 июня 2019

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

#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...