반응형

셀레니움 에서 백그라운드 작업(headless)시 다운로드 명령이 진행 안되는 현상이 있는데, 이는 보안설계가 원인이라고 한다. 이는 간단하게 아래 함수(enable_download)를 추가하여 가능케 할 수 있다.

driver_path = '크롬드라이버 설치된 경로'
url = '다운로드할 내용이 있는 사이트 주소'

def enable_download(driver):
    print('백그라운드 다운로드 기능 활성화')
    driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
    params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': '다운로드파일 위치'}}
    driver.execute("send_command", params)

def setting_chrome_options():
    print('옵션 설정')
    options = webdriver.ChromeOptions()
    options.add_argument('headless') # 백그라운드 작업
    return options
    
if __name__=='__main__':
	driver = webdriver.Chrome(executable_path=driver_path,options=setting_chrome_options())
	enable_download(driver)
	driver.get(url)

 

setting_chrome_option( ) 함수는 옵션 설정을 위한 함수인데, 여기서 options = webdriver.ChromeOptions( ) 를 통해 옵션을 생성해주고 options.add_argument('headless')를 통해 옵션을 추가해 줄 수 있다. 그리고 함수 실행 시

driver = webdriver.Chrome(executable_path=driver_path,options=setting_chrome_options( ))를 통해 옵션을 추가해줌으로써 백그라운드 작업모드로 만들 수 있다. 

그리고 enable_download(driver) 함수를 통해 백그라운드에서 다운로드가 가능하게 설정을 해주면 이제 해결이다.

 

반응형

+ 최근 글