Issue: Selenium PermissionError - [WinError 5] Access is denied

KimJiHong·2023년 11월 22일
1

Issue

목록 보기
4/7
post-thumbnail

Issue

나는 현재 chromedriver와 selenium을 통해 네이버 블로그와 인스타그램을 crawling 하는 프로젝트를 완성하고 배포하고 있다.

하지만, 몇몇 사용자들의 로컬 환경에서 selenium이 chromedriver를 실행하지 못하는 오류가 발생하고 있었다.

왜 실행이 되지 않는지 확인하기 위해
먼저 프로그램을 디버깅 모드로 변경해서 원인을 찾아 보았고, 아래 사진과 같이 PermissionError 가 발생해 selenium이 chromedriver를 실행하지 못하고 있었다.

오류 메시지를 확인 해보면, 현재 .wdm 디렉토리에서 권한 오류가 발생하고 있다.

즉, webdriver_manager 가 현재 사용중인 Chrome 버전에 맞춰 자동으로 chromedriver.exe 를 다운받는 디렉토리에서 권한 이슈가 발생하고 있던 것이다.


Searching to Solve

먼저, 해당 오류에 대해 찾아보기 위해 StackOverFlow 와 GitHub을 검색해봤다.

StackOverFlow 에 나와 똑같은 오류를 겪은 질문이 올라와 있어 답변들을 확인해봤다.

답변을 확인해보면 webdriver_managerGitHub Issue 에서도 똑같은 이슈를 다루고 있었다.

사람들이 추측하는 해당 오류의 원인은

webdriver_manager 가 4.0.0 으로 업데이트 된 이후 Mac 환경에서는 문제가 없지만, Windows 환경에서 chromedriver가 4개이상 실행되면 해당 PermissionError 오류가 발생한다는 것이다.

따라서, stackoverflow에서 제시한 방법은 WebDriver_manager 자체를 사용하지 않고 selenium을 실행하라는 것이다.

하지만, 정상적으로 작동하는 내 로컬 환경에서는

5개의 쓰레드를 생성되고 있었고, StackOverFlow 에서 제시해준 방법을 사용해서 재배포했을 때도 계속해서 같은 오류가 발생하고 있었다...


My Solution

WebDriver_manager 를 사용하지 않고, 배포했을 때도 문제가 발생해서 다음과 같은 방법을 생각해 봤다.

"권한 문제가 발생하는 원인이 .wdm 디렉토리라면, 해당 디렉토리의 권한을 읽고 쓸 수 있게 강제로 변환시켜보면 되지 않을까?"

그래서, 소스코드를 아래와 같이 수정해서 테스트를 진행해 봤다.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import os

def chrome_driver():
    driver_option = Options()
    
	# ...옵션설정...
    
    try:
        driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=driver_option)
        print('chrome과 연결이 완료되었습니다.')
        
    except PermissionError as e:
        current_username = os.getenv('USERNAME')
        wdm_path = f"C:\\Users\\{current_username}\\.wdm"
    
    	# .wdm 디렉토리 하위 파일들(/T) 전부 Full Control 권한(:F)으로 변경 command
        command = f"icacls \"{wdm_path}\" /inheritance:r /grant {current_username}:F /T"
        os.system(command= command)
        
        driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=driver_option)
        print('chrome과 연결이 완료되었습니다.')

    except Exception as e:
        print(e)
        print("chromedriver를 사용할 수 없습니다.")

chrome_driver()

.wdm 디렉토리 내 모든 파일들의 권한을 강제로 F 즉, Full Control 로 변경하여 오류를 해결할 수 있었다.

내 경우, 오류가 발생했던 원인은 selenium 이나 WebDriver_manager 문제가 아닌

오류 그대로 .wdm 디렉토리 또는 하위 파일의 권한 문제로 인해 발생한 오류 였던 것 같다.

만약 나와 같이 PermissionError: [WinError 5] Access is Denied 오류가 발생한다면

  • WebDriver_manager 를 사용하지 않고 실행해보기
  • .wdm 디렉토리 권한 강제 변경

두가지를 진행해보길 바란다..


Reference Articles for Troubleshooting Errors


stackoverflow - Permission Error when opening more than 3 selenium chrome driver at one time

github - webdriver_manager Issues

yuki.world - Python Selenium PermissionError: [WinError 5] Access is denied Solution

Selenium Docs - Selenium 4.12.0 Document



틀린 부분이나 지적 또는 다른 해결방법 찾으신분은 댓글 이나 이메일 주시면 정말 감사합니다!

profile
https://h0ng.dev

0개의 댓글

관련 채용 정보