cs/크롤링

[크롤링] iframe

신_이나 2023. 3. 27. 17:46

 

 

 

url = 'https://prstaff.sogang.ac.kr/prstaff/index.html'

driver.get(url)
sleep(1)
driver.find_element(By.XPATH, '/html/body/div/ul/li[1]/a').click()

 위의 간단한 코드가 작동이 안되었다. 원인은 " Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/ul/li[1]/a"} " 라고 한다. 한마디로 나는 로그인을 눌러달라고 하였는데 로그인 버튼이 어딨는지 모른다는 것이다. 친절하게 XPATH 도 적어줬건만! 바보!

 이를 통해 iframe 이라는 것에 대해 알게 되었다. iframe 이란, 페이지 안에 다른 URL 로 접근하는 다른 창(?) 같은 느낌이다. 살펴보니 하늬가람 페이지는 본 페이지 안에 'tool_bar' 라는 class 의 iframe 을 두고 있었다. 

이걸 알았다면 문제는 쉽게 풀려야 한다. 근데 풀리지 않았다. 왜냐? 대부분 iframe 에 접근할 때는 "driver.switch_to.frame()" 이라는 명령어를 통해 괄호 안에 id 값을 써주기 때문이다. 하지만 우리의 하늬가람 페이지에는 class 의 값만 있다. 

 

 

url = 'https://prstaff.sogang.ac.kr/prstaff/index.html'

driver.get(url)
sleep(1)
iframe = driver.find_element(By.XPATH, '//*[@id="header"]/div/div[1]/iframe')
driver.switch_to.frame(iframe)

driver.find_element(By.XPATH, '/html/body/div/ul/li[1]/a').click()

 그래서 위에 처럼 iframe 을 먼저 찾아주고 그 다음에 접근하였더니 원하는 로그인 창이 나왔다. 짜릿해