본문 바로가기
업무자동화/파이썬-아래아한글 자동화 응용

selenium으로 크롤링할 때 frame과 object 태그 차이

by Martinii의 회사원코딩 2020. 3. 31.

html 안에 html을 삽입해놓은 웹사이트가 많이 있다.

한 개의 html 안에 수천 수만줄의 태그와 js를 유지관리하기도 힘드니,

어찌 보면 개발자 입장에서 당연할 수 있다.

이 때 삽입하는 방법은 주로 iframe태그를 넣거나, object 태그를 넣는 방법 중 하나로 하는데

각각을 크롤링하는 방법에 작은 차이가 있다.

우선 iframe이 삽입되어 있는 경우는(주로 동영상 플레이어나, 메뉴바, 사이드바와 본문내용이 구분되는 경우에 사용)

driver.find_element_~가 아니라

driver.switch_to.frame(프레임name이나 id)로 접근하고,

상위프레임으로 이동해야 할 때 다시

driver.switch_to.parent_frame 이나

driver.switch_to.default_frame 등을 사용해서 이동할 수 있다.

또한 프레임 안에서 정의된 js함수를 실행할 때에도

프레임 안으로 이동한 다음 driver.execute_script(함수명())으로 해당 js함수를 실행하면 된다.

반면, object태그로 html을 불러온 경우에는

셀레늄의 driver.page_source 로 object태그 내부의 html을 읽을 수 없다.

이 때는 driver.switch_to 메서드가 아니라

object = driver.find_element~ 로 해당 object 태그를 찾은 후에

object.find_element~ 로 내부 태그를 찾으면 된다.

(현재 프레임이 어딘지 계속 신경써야 하는 문제가 없으므로 간편하기도 하다)

다만 이 경우에 object 내부에만 정의된 js함수는 execute_script로도 잘 실행이 되지 않는데..

개인적으로 해결한 방법은...

개발자도구에서 함수를 정의한 부분을 찾아 복사한 다음

driver.execute_script(함수정의; 함수())로 함수정의와 함수실행을 붙여서 실행하면

잘 실행된다.

잘 이해가 안되지만 재미있는 점은...

driver.execute_script(함수정의)
driver.execute_script(함수())

이렇게 따로 실행하면 "정의되어 있지 않은 함수"라는 오류가 발생한다.

이게 웹 보안 때문인지 모르겠지만.. 붙여서 실행하면 실행되는 보안대책이라면

무용지물 아닌가?

 


회사원코딩이 추천하는 오늘자 파이썬 입문교재 3종

 

1. 모두의 파이썬 X 알고리즘(합본호):누구나 쉽게 배우는 프로그래밍 기초

 

모두의 파이썬 X 알고리즘(합본호):누구나 쉽게 배우는 프로그래밍 기초

COUPANG

www.coupang.com

파이썬으로 프로그래밍에 처음 입문하기엔 아주 재미있고 쉽게 배울 수 있음.
다른언어 사용자가 파이썬을 배우는 교재로는 비추천. 다소 가벼운 느낌.

 

2. 초보자를 위한 파이썬 200제

 

초보자를 위한 파이썬 200제

COUPANG

www.coupang.com

깔끔한 예제와 소스에 대한 자세한 설명이 돋보이는 교재.
입문-초급-중급-고급 난이도로 단계별 도전이 가능한 꽤 괜찮은 입문서.

 

3. 혼자 공부하는 첫 프로그래밍 with 파이썬:1:1 과외하듯 배우는 왕초보 코딩 입문서

 

혼자 공부하는 첫 프로그래밍 with 파이썬:1:1 과외하듯 배우는 왕초보 코딩 입문서

COUPANG

www.coupang.com

초유의 베스트셀러 "혼공파"마저도 당신에게 어렵게 느껴진다면?
유튜브 무료강의, 온라인실습과 다양한 이미지를 통해
제목대로 "1:1과외하듯" 파이썬을 배워볼 수 있음.

댓글0