DoITgrow

[파이썬 웹 크롤링] 셀레니움(Selenium) 디버깅 모드 활용 (로그인이 필요한 웹사이트도 쉽게 크롤링 가능) 본문

프로그래밍

[파이썬 웹 크롤링] 셀레니움(Selenium) 디버깅 모드 활용 (로그인이 필요한 웹사이트도 쉽게 크롤링 가능)

김수성 (Kim SuSung) 2022. 1. 11. 17:15
반응형

들어가며

안녕하세요. 오늘 소개드릴 내용은 웹 크롤링할 때 많이 사용하는 셀레니움 패키지에 관한 내용입니다. 아마도 셀레니움의 디버깅 모드를 알고 계시는 분들은 크롤링 알고리즘을 만들 때 시간을 많이 절약하실 것 같고, 모르시는 분들은 크롤링 절차를 추가할수록 디버깅 시간이 더 오래걸릴 것 같네요. 그만큼 알고있으면 좋은 디버깅 모드에 대해 알려드리겠습니다.

셀레니움 디버깅 모드의 편리성

예를들어 아래와 같은 과정으로 크롤링 코드를 작성한다고 할 때, "B"에 대한 코드를 작성하는 단계라고 한다면 디버깅시간은 금방 걸릴 것입니다. 디버깅 모드 필요없이 그냥 실행해도 "A → B"까지의 코드 동작 과정만 확인하면 되니까요.

그러나 만약 마지막 단계인 "E"에 대한 코드가 정상적으로 작성되었는지 확인하기 위해 코드를 실행한다면 "A → B → C → D → E"의 모든 과정이 수행되길 기다려야 하고, 심지어 과정이 더 많아질 경우 더 많은 시간이 소요될 수 있습니다.  따라서 디버깅 모드를 통해 셀레니움을 실행한다면 순서에 구애받지 않고, 자유 자재로 단계를 옮겨가며 코드를 실행하고 테스트할 수 있습니다.

참고로 단계별로 테스트 하기 위해선 코드를 분리하여 실행할 수 있는 주피터 노트북을 사용하면 편리합니다.

(파이썬 기본 IDE를 사용해도 되는데 주피터 노트북이 더욱 편리합니다.)

셀레니움 디버깅 모드 실행 방법 (크롬 및 윈도우 기준)

1. 크롬이 설치된 폴더 경로에서 CMD 창 실행

먼저 셀레니움 디버깅 모드의 크롬창을 띄우기 위해 크롬이 설치된 폴더로 이동합니다. 보통 아래 경로에 설치되어 있는데 사용하고 계시는 컴퓨터 환경마다 다를 수 있으므로 사전에 확인이 필요합니다.

* 크롬 설치 경로 : C:\Program Files\Google\Chrome\Application

그런 다음 아래와 같이 탐색기의 경로 부분을 마우스로 클릭하고 "cmd" 라고 작성하고 "엔터"를 칩니다.

그러면 해당 경로에서 CMD 창이 열리게 됩니다.

참고로 꼭 아래와 같이 CMD 창을 열 필요는 없고, CMD에 익숙하신 분들은 아무대서나 CMD 창을 연 후, 디렉토리 변경 명령어를 통해 크롬 설치 폴더까지 이동하셔도 됩니다.

2. 디버깅 모드로 크롬 브라우저 실행

CMD 창에서 아래와 같이 명령어를 입력합니다. 여기서 변경 가능한 부분은 포트 번호인 "9222"와 디버깅 모드 관련 데이터를 저장할 폴더 경로 "C:/ChromeTEMP" 입니다.

Microsoft Windows [Version 10.0.19042.1415]
(c) Microsoft Corporation. All rights reserved.

C:\Program Files\Google\Chrome\Application>chrome.exe --remote-debugging-port=9222 --user-data-dir="C:/ChromeTEMP"

위 명령어를 입력하면 크롬 브라우저 창이 하나 실행됩니다. 이 브라우저는 디버깅 모드로 크롤링 코드를 테스트하고 싶은 웹사이트로 미리 변경해놓고, 아래 "3번" 과정을 거친 이후에 크롤링 코드 테스트를 해볼 수 있습니다.

3. 파이썬에서 디버깅 크롬 브라우저와 연동을 위한 코드

마지막으로 미리 실행했던 디버깅용 크롬 브라우저와 크롬드라이버를 연결해 주어야 합니다. 앞서 포트 번호는 9222를 사용하여 크롬 디버깅 창을 열었습니다. 따라서 아래와 같이 Options 객체를 생성하고, 여기에 "debuggerAddress"를 추가해 줍니다. "127.0.0.1:9222"에서 "127.0.0.1" 부분은 로컬호스트를 의미하므로 그대로 작성하고 뒤에 9222 포트 번호를 붙여 줍니다. 그리고 본인이 저장한 "chrome_driver.exe" 경로를 입력하고, driver 객체를 생성하면 됩니다.

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 = 'chromedriver.exe 경로'
driver = webdriver.Chrome(chrome_driver, options= chrome_options)
--------------------------------------------------------------------------------------------
driver.get("https://www.naver.com")

이제부터 페이지를 마구 변경하며 크롤링 코드가 어떻게 작동하는지 테스트해 볼 수 있습니다. 만약 로그인이 필요한 웹사이트인 경우 수동으로 로그인해 놓고, 이후에 크롤링 코드를 작동시켜서 데이터를 수집할 수 도 있습니다.

마치며

지금까지 알려드린 내용은 사실 엄청 간단하지만 모르시고 계셨던 분들도 있을 것 같기 때문에 이러한 분들에게 많은 도움이 되면 좋겠습니다. 황금같은 시간을 많이 절약하시길 바라며, 어렵거나 궁금한 점은 댓글로 남겨주시면 답변드리겠습니다~.

반응형
7 Comments
  • 프로필사진 조영진 2022.07.04 16:48 친절한 설명 덕분에 도움이 되었습니다.
    수고하십시오.
  • 프로필사진 000 2022.07.13 19:19 cmd를 키고 명령어를 쳤는데 엑세스가 거부되었다며 되지 않는데요?

  • 프로필사진 김수성 (Kim SuSung) 2022.07.21 20:19 신고 제가 요새 다른 일 때문에 확인이 늦었어요!. 아마도 cmd에 관리자 권한이 없어서 엑세스 거부가 될 수도 있어요.

    cmd 실행 프로그램 여실 때, 오른쪽 버튼 클릭하고 관리자 권한으로 실행하기를 통해서 작업해 보시겠어요?~
  • 프로필사진 444 2022.07.26 11:27 2번 과정까지 명령어 입력하면 크롬 구동되는것 확인 하였고 비주얼 스튜디오 코드에서 3번 코드 입력하였더니
    driver = webdriver.Chrome(chrome_driver, options= chrome_options) 이거에 대한 부분에 대해
    NameError: name 'chrome_options' is not defined. Did you mean: 'Chrome_options'? 이런 에러 표시가 되고 있습니다 ㅜㅜ
  • 프로필사진 김수성 (Kim SuSung) 2022.07.30 22:42 신고 코드 전체를 보여주시면 더 정확한 진단이 가능할 것 같긴한데요. 일단 에러 메시지로만 봐서는 아래의 chrome_options 객체 변수가 만들어 지지 않을 것 같아요. 아래 코드 부분을 다시확인해 보시겠어요?
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

  • 프로필사진 zoqnf42 2022.09.03 09:26 안녕하세요 알고싶은 내용 찾다가 여기까지 왔네요 혹시 자바에선 셀레니움 디버깅을 할 수있는지 궁금해서 여쭤봅니다
  • 프로필사진 김수성 (Kim SuSung) 2022.09.25 14:53 신고 죄송합니다. 제가 자바는 안 다루어 봐서 확실히는 모르겠네요.
    근데 아마 동작 원리는 똑같이 할 수 있을 것 같은데요.
    다른 블로그나 웹사이트를 찾아보셔야 할 것 같아요.
    도움이 못 되어 죄송하네요!
댓글쓰기 폼
Prev 1 2 3 4 5 6 7 Next