블로그에 포스팅을 정말 오랜만에 올리는 것 같다. 지금 확인해보니 11월 내내 포스팅을 하나도 올리지 않았었다.
오랜만에 포스팅을 올리는 이유는 여느 때와 같이 회사에서 Python을 이용하여 Selenium을 사용하고 있었는데 (하지만 나는 Java 개발자다) Chrome에 설치된 확장 프로그램이 selenium으로 연 chrome driver에서는 보이지 않는 것이었다.
테스트를 위해 광고 차단 확장 프로그램인 AdGuard를 설치한 Google Chrome을 준비하였다.
광고 차단 확장이 설치된 크롬으로 뉴스 페이지를 들어갔을 때는 광고가 보이지 않는 것을 확인할 수 있는데, 같은 환경에서 Selenium으로 같은 페이지로 들어갔을 때 여기저기 광고가 떠있는 모습을 볼 수 있다.
또한 우측 상단을 봤을 때 확장 프로그램 아이콘 자체가 없는 것을 확인할 수 있다.
지금까지는 chrome의 설정 및 사용자 정보를 유지한 채 사용하던 경우가 없어 몰랐는데 우리가 사용하는 Google Chrome과 Selenium의 Webdriver는 서로 데이터를 공유하지 않는 것이었다.
Selenium에서 확장 프로그램을 사용하도록 하는 것은 꽤나 간단하였다.
chrome_options = webdriver.ChromeOptions()
chrome_options.add_extension('${Chrome Extension 파일}')
driver = webdriver.Chrome('${chromedriver 경로}', options=chrome_options)
webdriver를 생성할 때 주는 options 중 add_extension으로 확장 프로그램의 zip 파일 또는 crx 파일 경로를 지정해 주면 된다.
확장 프로그램의 zip 파일이나 crx 파일은 따로 제공해주는 파일이 있는 경우 해당 파일을 받아 사용하면 되고, 따로 제공해주지 않는 경우 현재 설치된 확장에서 crx 파일을 추출하면 된다.
크롬의 설정 (우측 상단 점 세 개) > 도구 더보기 > 확장 프로그램 또는 chrome 주소창에 chrome://extensions를 입력하면 확장 프로그램 도구가 나타나게 된다.
여기서 우측 상단에 있는 Developer mode (개발자 모드)를 활성화하게 되면 확장 프로그램의 ID와 Load unpacked, Pack extension, Update 메뉴가 나타나게 된다.
여기서 chrome 확장이 설치된 경로로 이동한 뒤 추출을 원하는 확장의 ID로 프로그램을 찾아 Pack extension(확장 프로그램 압축)을 이용하면 추출할 수 있다.
chrome 확장이 설치된 경로는 아래와 같다.
https://stackoverflow.com/questions/14543896/where-does-chrome-store-extensions
// Windows
C:\Users\${사용자명}\AppData\Local\Google\Chrome\User Data\Default\Extensions
// Linux
~/.config/google-chrome/Default/Extensions/
// MacOS
~/Library/Application\ Support/Google/Chrome/Default/Extensions
해당 경로로 이동한 뒤 확장 프로그램 ID로 된 폴더로 들어가게 되면 이렇게 버전명으로 된 폴더가 존재한다.
버전명으로 된 폴더로 들어가게 되면
확장 프로그램에 필요한 manifest.json과 여러 파일들이 들어있다.
이 경로를 복사한 뒤
다시 크롬으로 돌아가 Pack extension(확장 프로그램 압축)을 누르고 Extension root directory(확장 프로그램 루트 디렉터리)에 위에서 복사한 경로를 넣어주면 해당 확장 프로그램의 crx 파일을 추출할 수 있게 된다.
만약 확장 프로그램의 경로를 입력해 주었는데 추출이 되지 않을 시
해당 폴더를 접근할 수 있는 경로로 복사한 뒤 해당 경로를 넣어주면 추출할 수 있다.
성공적으로 추출하게 되면 위와 같은 메시지를 확인할 수 있다.
위에 나타난 Extension의 경로를 복사해서 options의 add_extension에 넣어주면 해당 확장 프로그램이 추가된 webdriver를 사용할 수 있다.
이렇게 add_extension으로 확장 프로그램을 추가한 뒤 동일한 페이지를 selenium으로 열어보게 되면
AdGuard가 추가되어 광고가 제거된 페이지를 확인할 수 있다.
'Python' 카테고리의 다른 글
[Selenium] DeprecationWarning: executable_path has been deprecated, please pass in a Service object 해결하기 (0) | 2023.01.01 |
---|---|
[Selenium] Selenium 화면에서 요소가 사라질 때까지 대기하기 (0) | 2022.12.20 |
[Python] Python Thread 종료 시키기 (0) | 2022.04.30 |
[Selenium] Selenium 창 크기(윈도우 사이즈) 조절하기 (0) | 2022.04.01 |
[Python] 폴더가 존재하지 않을 경우에만 폴더 만들기 (0) | 2022.03.31 |