David의 개발 이야기!

[ iframe 개념 이해하기 ] 다음카페 자동으로 글 게시하는 프로그램 만들기! 본문

크롤링 공부

[ iframe 개념 이해하기 ] 다음카페 자동으로 글 게시하는 프로그램 만들기!

david.kim2028 2021. 12. 16. 01:12
반응형

아이프레임은 HTML Inline Frame 요소이며 inline frame의 약자이다.

 

효과적으로 다른 HTML 페이지를 현재 페이지에 포함시키는 중첩된 브라우저로

iframe 요소를 이용하면 해당 웹 페이지 안에 어떠한 제한 없이 다른 페이지를 불러와서 삽입 할 수 있다!

 

그래서, 크롤링을 할때, 상당히 문제가 되는데! 간혹가다가 NO SUCH ELEMENT ERROR가 뜨면 의심해볼만 하다!

 

[ 크롤링시 포인트 ] 


# 매번 iframe 확인해야되나...? -> No Such Element 에러시,
# 1. css 선택자 잘 썼는지 확인
# 2. time.sleep()을 길게 조정
# 3. 프레임안에 들어왔는지 확인!


# iframe 전환은 바깥에서 안으로만 가능하다! 바깥에서 안은 안됨! 

iframe 안으로 들어와있으면 바깥에 있는 걸 건드리지 못한다! 빠져나오는 코드를 입력해주어야한다.

 

from selenium import webdriver
import time

browser = webdriver.Chrome("./chromedriver")
browser.get("https://logins.daum.net/accounts/signinform.do?url=https%3A%2F%2Fwww.daum.net%2F")
id = browser.find_element_by_css_selector("#id")
id.send_keys("*************")
pw = browser.find_element_by_css_selector("#inputPwd")
pw.send_keys("************")
browser.find_element_by_css_selector("#loginBtn").click()
time.sleep(3)
browser.get("http://cafe.daum.net/talingpython")
time.sleep(3)
# 가입인사 게시판 클릭
browser.switch_to.frame(browser.find_element_by_css_selector("#down")) # 프레임 전환 #태그명 생략해도 됨 iframe 지워도 됨
browser.find_element_by_css_selector("#fldlink_lF1R_309").click()
time.sleep(3)
# 글쓰기 버튼 클릭
browser.find_element_by_css_selector("#article-write-btn").click()
time.sleep(3)
# 제목 작성
subject = browser.find_element_by_css_selector("input.title__input")
subject.send_keys("안녕하세요!")
# 본문 작성
browser.switch_to.frame(browser.find_element_by_css_selector("#keditorContainer_ifr")) # 프레임 전환
content = browser.find_element_by_css_selector("#tinymce")
content.send_keys("반갑습니다.")
# 발행 버튼 클릭
browser.switch_to.default_content() # 제일 바깥으로 빠져나옴.
browser.switch_to.frame(browser.find_element_by_css_selector("#down")) # 프레임 전환
browser.find_element_by_css_selector("button.btn_g.full_type1").click()
time.sleep(3)
browser.close()

 

 

다음카페 화면 왼쪽 날개에 있는 메뉴바가 iframe이다!

 

 

head 안에 head가 또 있는 것을 알 수 있다. iframe 참고!

 

iframe 안에 있는 것을 크롤링하기 위해서는

switch_to.frame(browser.find_element_by_css_selector())를 이용한다!

 

# 가입인사 게시판 클릭
browser.switch_to.frame(browser.find_element_by_css_selector("#down")) # 프레임 전환 #태그명 생략해도 됨 iframe 지워도 됨
browser.find_element_by_css_selector("#fldlink_lF1R_309").click()
time.sleep(3)

 

위에서 말한 iframe은 바깥에서 안으로 라고 이야기했는데 그 뜻은 아래와 같다!

# 발행 버튼 클릭
browser.switch_to.default_content() # 제일 바깥으로 빠져나옴.
browser.switch_to.frame(browser.find_element_by_css_selector("#down")) # 프레임 전환
browser.find_element_by_css_selector("button.btn_g.full_type1").click()
time.sleep(3)
browser.close()

browser.switch_to.default_content() 를 통해 밖으로 빠져나온후 다시 들어가야한다!

 

반응형
Comments