본문으로 바로가기
728x90
반응형



개요

크롤링을 하다 보면 복잡한 로그인 기능부터 구현을 해야 자신이 가져오고 싶은 데이터를 가져올 수 있는 경우가 종종 있습니다. 그 '로그인'이라는 것이 단순히 ID와 Password를 통해 이루어진다면 상관이 없겠지만 보안을 위해 이중 인증을 사용하는 경우가 간혹 있습니다. '핸드폰'으로 인증번호 전송받기 또는 이메일에 인증 링크를 전송받아 현재 접속한 곳이 유효한 접속인지 아닌지를 판단하는 경우 등등 이러한 로그인 과정을 크롤링을 통해 구현하려면 단순히 '어떻게 하지?'가 아닌 그냥 이건 'Open API'를 쓰던가 그러지 않으면 과정이 어려워집니다

 

이 글에서 제시하는 방법은 내가 작업하는 Chrome에서 크롤링을 하는 방법인데요. 다소 생소하실 수 있습니다. Chrome Driver를 사용할 때는 거의 Selenium Module의 Chrome() Method를 이용해 새로운 Chrome창을 띄움과 동시에 옵션을 설정하고 get() 같은 Method로 새로 띄워진 chrome창을 통해 제어하는 예제들을 접하기 때문입니다. 

 

디버깅 크롬 셋팅하기

우선 본인이 쓰고 있는 Chrome에서 크롤링을 진행하시려면 chromedriver.exe가 아닌 chrome.exe가 필요합니다.

윈도의 '파일 위치 열기(찾기)'의 기능으로 찾은 chrome.exe 파일입니다.  이 파일을 여실 때 일반적인 더블 클릭이 아닌 명령 프롬프트(Cmd)를 이용해 다음의 명령어로 열어줘야 합니다.

<복붙용> chrome.exe --remote-debugging-port=9222 --user-data-dir="경로지정"

"경로지정" 에는 어떤 경로든 상관은 없습니다만 저 명령어를 실행하고 나면 생기는 여러 파일들이 보기 싫으니 다음과 같이 하나의 폴더를 만든 다음에 실행하면 깔끔합니다.

명령어가 실행되고 난 뒤에는 경로로 지정했던 폴더에 다음과 같은 폴더와 파일들이 생겨납니다.

 

디버깅 크롬과 연결하기 위한 Selenium 코드

# Sample Code

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver = "" # Your Chrome Driver path
driver = webdriver.Chrome(chrome_driver, options=chrome_options)

디버깅 크롬과 연결하기 위한 핵심 Code입니다. debugging mode로 열린 chrome의 9222 포트로 접근하는 코드입니다

여기까지가 현재 chrome에서 크롤링을 진행할 수 있게 만드는 과정의 전부입니다. 

예전 블로그에 있던 내용을 복사 붙여넣기로 옮겨와서 그런지 영상이 제대로 가져와지진 않았습니다만 위의 이미지에서 수행하는 코드는 단지 range(1,5)라는 구문으로 1~4까지. send_keys()를 이용해 입력을 보낼 뿐인 코드입니다.

 

어떻게 활용할 수 있을까?

크롤링하는 방법을 사용하기에 따라서 페이스북 같은 스크롤을 내려야 보이는 게시글을 크롤링한다거나 로그인이 복잡한 사이트에서 일단 로그인을 해놓고 만들어 놓은 스크립트를 실행해 특정 데이터를 다운로드한다거나 또는 정리해서 쓴다거나 하는 식으로도 만들어 볼 수도 있습니다.


추가로..

본 포스팅을 보고 따라 해 보시다 에러가 발생하신 분들이 있으셔서 저도 위 포스팅을 그대로 따라갔는데 같은 증상이 일어났습니다. 아마 에러 내용은 다음과 같을 거라 생각됩니다.

저는 다음과 같이 해결했습니다. 먼저 chrome.exe가 있는 폴더를 보면 맨 위에 74.0.3729부터 시작하는 폴더가 하나 보입니다.  

이 부분을 확인 하시고

저는 chrome driver를 위에서 보이는 74.x 버전대를 다운로드하여서 크롬 드라이버 경로를 74.x 버전대로 잡아주고 실행한 결과 문제없이 잘 작동했습니다.

 


안녕하세요 jako입니다.

해당 글을 통해 유용한 정보를 얻으셨길 바랍니다.

경험과 지식의 공유를 통해 조금 더 양질의 정보를 생성하기위한 뉴스레터를 만들었습니다.

블로그에는 기재되지 않을 유용한 정보 또한 뉴스레터에 담아 발행하고자합니다. 

 링크를 클릭하여 뉴스레터를 구독해주세요.

양질의 정보와 함께 찾아뵙겠습니다.


 

 

728x90
반응형