크롤링을 해야하는데 복잡한 로그인 과정이 필요하다.
크롤링을 하다보면 복잡한 로그인 기능부터 구현을 해야 자신이 가져오고 싶은 데이터를 가져올 수 있는 경우가 종종 있습니다. 그 '로그인' 이라는 것이 단순히 ID와 Password를 통해 이루어진다면 상관이 없겠지만 보안을 위해 이중 인증을 사용하는 경우가 간혹 있습니다. '핸드폰'으로 인증번호 전송받기, 또는 이메일에 인증 링크를 전송 받아 현재 접속한 곳이 유효한 접속인지 아닌지를 판단하는 경우 등등 이러한 로그인 과정을 크롤링을 통해 구현하려면 단순히 '어떻게 하지?'가 아닌 그냥 이건 'Open API'를 쓰던가 그러지 않으면 '내 선에서는 못하는 것' 정도로 생각이 되서 피하게 됩니다.
내가 쓰고 있는 chrome 화면에서의 크롤링
그래도 하나의 방법은 있습니다. 이 글의 제목과 같이 현재 내가 작업하는 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="경로지정"
"경로지정" 에는 어떤 경로든 상관은 없습니다만 저 명령어를 실행하고 나면 생기는 여러 파일들이 보기 싫으니 다음과 같이 하나의 폴더를 만든 다음에 실행하면 깔끔합니다.
명령어가 실행되고 난 뒤에는 경로로 지정했던 폴더에 다음과 같은 폴더와 파일들이 생겨납니다.
#Code Description
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)
필요한 Module과 현재 창에서 Chrome을 제어하기 위한 핵심 Code입니다. 대충 읽어보자면 debugging mode와 9222 포트로 실행시킨 chrome에 접근하는 코드처럼 보입니다.
여기까지가 현재 chrome에서 크롤링을 진행할 수 있게 만드는 과정의 전부입니다. 의외로 간단하게 끝납니다. 필요한 건 chrome.exe를 진행할 때 cmd에서 몇 가지 옵션을 줘서 실행하고 Python Script에 위와 같은 옵션(chrome_driver_option)을 줘야한다는 것 입니다.
밑의 영상은 위의 과정으로 실행한 간단한 예제입니다
단지 range(1,5) 라는 구문으로 1~4까지 .send_keys()를 이용해 입력을 보낼 뿐인 코드입니다.
현재 chrome에서 크롤링하는 방법을 사용하기에 따라서 페이스북 같은 스크롤을 내려야 보이는 게시글을 크롤링 한다거나 로그인이 복잡한 사이트에서 일단 로그인을 해놓고 만들어 놓은 스크립트를 실행해 특정 데이터를 다운로드 받는다거나 또는 정리해서 쓴다거나 하는 식으로도 만들어 볼 수 있습니다.
[+] 2019.06.09 추가 내용
본 포스팅을 보고 따라해보시다 에러가 발생하신 분들이 있으셔서 저도 위 포스팅을 그대로 따라갔는데 같은 증상이 일어났습니다. 아마 에러 내용은 다음과 같을거라 생각됩니다.
저는 다음과 같이 해결했습니다. 먼저 chrome.exe가 있는 폴더를 보면 맨 위에 74.0.3729부터 시작하는 폴더가 하나 보입니다.
이 부분을 확인한 하시고
저는 chrome driver를 위에서 보이는 74.x 버전대를 다운로드 받아서 크롬드라이버 경로를 74.x 버전 대로 잡아주고 실행한 결과 문제없이 잘 작동했습니다.
수정된 코드는 없습니다.
[+] 2019.06.28 추가 내용
디버깅 크롬이 열려있는 지 확인하는 방법
.
'Python > Web crowling' 카테고리의 다른 글
[ selenium의 webdriver() / implicitly_wait() / WebDriverWait() + EC + By ==> bs4 ]를 이용한 연결된 페이지를 타고가서/기다렸다가 추가정보를 scrapping하는 crawling (0) | 2020.02.09 |
---|---|
window,mac selenium 새 탭 열기 및 탭 전환 (0) | 2020.02.09 |
selenium에서 자식 창, 부모 창 이동하기 (0) | 2020.02.09 |
selenium으로 크롤링 시 현재 실행중인 크롬에서 실행하기 (0) | 2020.02.09 |
웹 크롤러 - 봇 탐지 우회하기 (1) | 2020.02.09 |