반응형
셀레니움 에서 백그라운드 작업(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) 함수를 통해 백그라운드에서 다운로드가 가능하게 설정을 해주면 이제 해결이다.
반응형