본문 바로가기
TOP
데이터 스킬업/웹크롤링

[파이썬:웹크롤링] #13 인스타그램 로그인하기 with Selenium

by 티챠림 2022. 6. 12.

왕초보 웹크롤링 따라하기] 웹 제어, 브라우저 크기 설정, 셀레니움, Selenium, 로그인, 텍스트 입력, 클릭, 요소 찾기, 경로 찾기.


#13 인스타그램 로그인하기



▼ 전체코드 미리보기

더보기
#작업에 필요한 라이브러리 
from selenium import webdriver 
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time


#01. 웹 열기
dr = webdriver.Chrome("C:/windows/chromedriver.exe") #웹드라이버로 크롬 웹 켜기
dr.set_window_size(414, 800) 	#브라우저 크기 414*800으로 고정
dr.get('https://www.instagram.com/') #인스타그램 웹 켜기
time.sleep(2) 	#2초 대기


# 02. 로그인
#경로 지정
id_box = dr.find_element_by_css_selector("#loginForm > div > div:nth-child(1) > div > label > input")   #아이디 입력창
password_box = dr.find_element_by_css_selector("#loginForm > div > div:nth-child(2) > div > label > input")     #비밀번호 입력창
login_button = dr.find_element_by_css_selector('#loginForm > div > div:nth-child(3) > button')      #로그인 버튼

#동작 제어
act = ActionChains(dr)      #동작 명령어 지정
act.send_keys_to_element(id_box, '아이디').send_keys_to_element(password_box, '비밀번호').click(login_button).perform()     #아이디 입력, 비밀 번호 입력, 로그인 버튼 클릭 수행
time.sleep(2)


#03. 프로필 들어가기
#프로필 사진 클릭하기
my_photo = dr.find_element_by_css_selector('#react-root > section > nav > div._8MQSO.Cx7Bp > div > div > div.ctQZg.KtFt3 > div > div:nth-child(6) > div.EforU > span > img')
my_photo.click()
time.sleep(2)

#프로필 버튼 클릭하기
profile = dr.find_element_by_css_selector('section > nav > div._8MQSO.Cx7Bp > div > div > div.ctQZg > div > div:nth-child(6) > div.poA5q > div.uo5MA._2ciX.tWgj8.XWrBI > div._01UL2 > a:nth-child(1) > div')
profile.click()
time.sleep(2)

 

 

 

셀레니움으로 크롤링해 볼 동적페이지는 인스타그램이다. 동적페이지는 각 코드 한줄한줄이 제대로 작동하는지 확인해야하기 때문에 쥬피터노트북을 사용하는 것이 편하다. 쥬피터노트북을 사용하자.

 

▼쥬피터 노트북 설치 및 사용 관련 글

 

[파이썬:웹크롤링] #10 쥬피터노트북 dataframe 만들기 with Pandas

[왕초보 웹크롤링 따라하기] 데이터 시각화, 파이썬 도표 만들기, 판다스(pandas), 데이터프레임(Dataframe), 쥬피터노트북, 쥬피터 #10 쥬피터노트북 dataframe 만들기 이번에는 지금껏 사용하던 파이참

charimlab.tistory.com

 

 

크롤링을 하기 전, 어떤 데이터를 긁을 건지 미리 정해야하며 셀레니움으로 어떤 동작을 제어해야 하는지 판단해야 한다. 우선 간단하게 내 게시물의  게시일자/좋아요 수/댓글 수를 크롤링하리고 하고, 어떠한 동작들이 필요한지 웹페이지에서 수동으로 실행해보자. 먼저 인스타그램 웹을 열면 로그인창이 뜨는데, ID와 password를 입력해서 로그인해야 한다. 이후 내 게시물 들을 보기 위해  프로필 사진을 누르고 내 프로필을 클릭해야 한다. 내 피드가 로딩되면 각 게시물을 클릭하여 게시일자, 좋아요수, 댓글 수를 확인할 수 있다.  코드 작성에 들어가기 전필요한 동작을 순서대로 정리해 보자.

순서 동작 상세
1 인스타 웹페이지 열기 셀레니움을 통해서 크롭웹 켜기
2 ID 및 Passward 입력 텍스트 입력 및 로그인 버튼 클릭
3 내 프로필 들어가기 내 프로필 사진 클릭 - 내 프로필 클릭
4 게시물 좋아요/댓글 수 추출 최근 게시물에 마우스 올리기
좋아요/댓글 수 추출
5 게시물 게시일자 추출 게시물 클릭하기
게시일자 추출

 

그리고 동적페이지를 크롤링할 때 주의해야 하는 2가지가 있다. 바로 로딩시간 브라우저 크기이다. 동적 사이트에서는 데이터가 로딩되기 전 다음 동작을 수행하려고 하면 오류가 발생한다. 로딩되는 시간을 기다려주기 위해서는 time모듈과 WebDriverwait가 필요하다. 그리고 브라우저에 보이는 요소가 바뀔때마다 html이 바뀔 수 있으니 미리 브라우저의 크기를 설정해 둬야 오류를 줄일 수 있다. set_window_size(x, y)를 통해 사이즈를 설정해 주자(x는 가로, y는 세로).

#작업에 필요한 라이브러리 
from selenium import webdriver 
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time


#01. 웹 열기
dr = webdriver.Chrome("C:/windows/chromedriver.exe") #웹드라이버로 크롬 웹 켜기
dr.set_window_size(414, 800) 	#브라우저 크기 414*800으로 고정
dr.get('https://www.instagram.com/') #인스타그램 웹 켜기
time.sleep(2) 	#2초 대기

코드를 실행 후, 인스타그램 로그인 화면이 뜨면 성공!

 

 

 

  로그인 하기

로그인을 위해 ID와 Password를 입력 후, 로그인 버튼을 클릭해야 한다. 마우스 이동, 클릭, 텍스트 입력 등 키보드와 마우스로 할 수 있는 모든 행동은 셀레니움으로 원격제어가 가능하다. 우선 find 매소드로 각 요소들의 경로를 찾아주고,  Actionchain()을 사용하여 연속동작을 실행하는 코드를 만들어 주면 된다. 텍스트를 입력하는  send_keys_to_elemnet()메소드를 사용해 아이디와 패스워드를 적고 .click()메소드로 로그인 버튼을 클릭하면 된다. send_keys_to_elemnet() 아이디 및 패스워드 입력창 경로와 입력할 텍스트를 적고 마지막에 .click() 메소드를 적어주자.

# 02. 로그인
#경로 지정
id_box = dr.find_element_by_css_selector("#loginForm > div > div:nth-child(1) > div > label > input")   #아이디 입력창
password_box = dr.find_element_by_css_selector("#loginForm > div > div:nth-child(2) > div > label > input")     #비밀번호 입력창
login_button = dr.find_element_by_css_selector('#loginForm > div > div:nth-child(3) > button')      #로그인 버튼

#동작 제어
act = ActionChains(dr)      #동작 명령어 지정
act.send_keys_to_element(id_box, '아이디').send_keys_to_element(password_box, '비밀번호').click(login_button).perform()     #아이디 입력, 비밀 번호 입력, 로그인 버튼 클릭 수행
time.sleep(2)

로그인 후 2개의 알림팝업이 순서대로 뜬다.

 

정상적으로 로그인이 되는 것을 확인했으면, 이제 내 피드로 이동하면 된다. 브라우저 우측 상단의 내 프로필 사진을 클릭하고 내 프로필 버튼을 클릭하면 된다. find와 click 매소드로 코드를 작성해주자.

#03. 프로필 들어가기
#프로필 사진 클릭하기
my_photo = dr.find_element_by_css_selector('#react-root > section > nav > div._8MQSO.Cx7Bp > div > div > div.ctQZg.KtFt3 > div > div:nth-child(6) > div.EforU > span > img')
my_photo.click()
time.sleep(2)

#프로필 버튼 클릭하기
profile = dr.find_element_by_css_selector('section > nav > div._8MQSO.Cx7Bp > div > div > div.ctQZg > div > div:nth-child(6) > div.poA5q > div.uo5MA._2ciX.tWgj8.XWrBI > div._01UL2 > a:nth-child(1) > div')
profile.click()
time.sleep(2)


▼다음글 이어보기▼

 

[ep01:웹크롤링] #13 인스타그램 좋아요 수 크롤링(마우스오버/텍스트 추출) with 파이썬

[왕초보 웹크롤링 무작정 따라하기] 웹크롤링, 셀레니움, 액션체인, 마우스오버, move_to_element(), 웹 텍스트 추출, text 업무지옥을 탈출한 건에 대하여(feat.업무자동화) #13 인스타그램 좋아요 수 크

charimlab.tistory.com

댓글