linux

chromedriver 과 crontab 문제-/usr/bin/google-chrome is no longer running

summerorange 2023. 2. 19. 11:38
반응형

크롤링 해서 아침마다 자동으로 작업해두도록 뭘 짰는데, crontab으로 스케쥴 맞춰 두었는데 작동을 하지 않는다. 표 긁어서 엑셀로 자동으로 만들어 주고, 아침마다 그걸로 보고할 수 있는 업무 자동화 프로그램이었다. 코드 짜는 게 귀찮아서 그렇지 한 번 만들어 두면 매일 아침마다 스크랩 안 해도 되서 편하다.

chromedriver 경로와 디스플레이, crontab 간에 문제가 있는 것 같다. 

File "/home/user1/anaconda3/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

/home/yscho/Working/intranet-login/intranet_login.py:28: DeprecationWarning: use options instead of chrome_options
  driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=chrome_options

경로 문제인가? 크롬 드라이버를 하단으로 파일 복사를 해주고,

# terminal

cp chromedriver /usr/bin/chromedriver

크론탭에 들어가서 (crontab -e)

# crontab -e
DISPLAY=:0

이 코드를 추가해주었다.

그다음에 다시 빠져나오고,

홈 창에서 다음과 같이 명령어를 하나씩 치면서 크론탬에 경로를 복사해주었다

# terminal
echo PATH=$PATH > tmp.cron
echo >> tmp.cron
crontab -l >> tmp.cron
crontab tmp.cron

저렇게 명령어를 치면 크론탭에 들어가면 자동으로 PATH가 복사되어 맨 상단에 있는 걸 볼 수 있다.

#crontab -e 내용

# CRONTAB 과 chromedrive PATH 문제 있음 아래 줄 추가함
PATH=/home/user1/anaconda3/bin:/home/user1/anaconda3/condabin:/sbin:/bin:/usr/bin:/usr/local/bin:/snap/bin:/usr/local/java/jdk1.7.0_80/bin:/usr/local/java/jdk1.7.0_80/bin:/usr/local/java/jdk1.7.0_80/bin:/usr/local/java/jdk1.7.0_80/bin

# 추가함 
DISPLAY=:0
# m h  dom mon dow   command
06 16 * * * /home/user1/anaconda3/bin/python3 /home/user1/Working/intranet-login/intranet_login.py >> /home/user1/Working/intranet-login/intranet_login.log 2>&1

그 다음 원래 크롤링 파이썬 코드에서

chromedriver = '/usr/bin/chromedriver'
os.environ["webdriver.chrome.driver"]=chromedriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=chrome_options)

이렇게 추가했다.

돌리면서 log파일을 확인하니 

# 
/home/user1/Working/intranet-login/intranet_login.py:28: DeprecationWarning: use options instead of chrome_options
  driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=chrome_options)

deprecationWarning만 나오고 코드는 다 돌아간다.

그런데 암만 봐도 만들어져야 할 엑셀 파일이 보이지 않았다🥲

다시 코드를 수정해서, (DISPLAY:=0은 주석처리 했다.)

저장되는 형태를 텍스트 파일이나 csv 처럼 콤마로 구분해서 만들도록 했는데, 그건 되는 것 같았다.

일단 여기까지 기록 끝!

 

반응형