1
2
3
4
***** Usage Dev Env *****
= OS - macOS Monterey ver 12.3.1
= IDE - VSCode
= Lang - Python 3.10.4
cs

개발하고나서보니 아래의 내용 모두 다 무쓸모했다.

내가 크롤링하려던 사이트에서 스크립트의 오류인지 뭔지 chromedriver로는 정상적으로 로딩할 수 없었고, firefox를 이용한 geckodriver를 활용하니 단박에 모두 정리가 되었다.

 

아 크롬을 이렇게 버려야하나 ㅡㅡ;

파이썬으로 크롤링 개발을 하는데 요상한 에러가 발생했다. 사실 별 소스코드도 없이 파이썬에 셀레니움, 크롬드라이버를 붙여서 브라우저 하나 띄우는건데 여기서 저런 에러를 만날 줄이야 꿈에도 몰랐다.

 

대충 아래의 소스코드에서 오류가 발생했다.

1
2
3
4
5
6
7
8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
 
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=chrome_options)
driver.get('http://kimfish.co.kr')
driver.quit()
cs

 

그리고 발생오류상황은 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
➜  ~ /usr/local/bin/python3 /Users/kimfish/DEV/py_workspace/testChromeDriver.py
Traceback (most recent call last):
  File "/Users/kimfish/DEV/py_workspace/testChromeDriver.py", line 9, in <module>
    driver.get("https://bbs.ruliweb.com")
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 437, in get
    self.execute(Command.GET, {'url': url})
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 425, in execute
    self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash
from tab crashed
  (Session info: chrome=100.0.4896.88)
Stacktrace:
0   chromedriver                        0x0000000105383c34 chromedriver + 4406324
1   chromedriver                        0x000000010531d290 chromedriver + 3986064
2   chromedriver                        0x0000000104f7e71c chromedriver + 190236
=== 중략 ===
➜  ~ 
cs

 

Message: unknown error: session deleted because from tab crashed 와 같은 오류에 대해 검색을 해보니, 가상머신(대부분 도커)의 /dev/shm 메모리가 부족하다는둥 뭐라는둥 말이 많았는데 난 단순히 내 로컬환경에서 개발을 할 뿐이다 ㅠ

 

그래서 조금 더 찾아보니 chromedriver 호출시, 다음과 같은 옵션을 설정해주면 된다고 한다.

1
2
3
4
5
6
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--window-size=1420,1080')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-gpu')
cs

적용 후 돌렸다! 그런데도 똑같은 오류가 발생한다!

 

환장하겄다 싶어 옵션을 다 빼보면서 테스트 하다가 결국 원인을 찾기는 했다. 바로, --headless 옵션이 문제였다.

해당 옵션은 UI가 지원되지 않는 서버들을 위해 작동하는 옵션으로 알고 있는데, 내 개발환경에서는 왜 오류가 발생하는지는 아직 잘 모르겠다. 일단 저 옵션을 제외하고는 잘 동작하니까 개발하겠지만... 조금 불안하다. 원인을 알면 해결법도 찾아야하는데.. 으으 

블로그 이미지

김생선

세상의 모든것을 어장관리

,

얼마전에 맥북을 샀다. 그러면서 새롭게 개발환경을 설정했다. 이하는 OpenJdk를 설치하는 내용이다.

명령어 순서는 다음과 같다.

1
2
3
4
5
6
7
1. brew tap AdoptOpenJdk/openjdk
 
2. brew install --cask adoptopenjdk8
 
3. /usr/libexec/java_home -1.8
 
4. java -version
cs

 

1. brew tap AdoptOpenJdk/openjdk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
kimfish@KimFish-MacBookPro ~ % brew tap AdoptOpenJdk/openjdk
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
Updated 4 formulae.
==> Tapping adoptopenjdk/openjdk
Cloning into '/opt/homebrew/Library/Taps/adoptopenjdk/homebrew-openjdk'...
remote: Enumerating objects: 1996done.
remote: Counting objects: 100% (60/60), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 1996 (delta 44), reused 49 (delta 38), pack-reused 1936
Receiving objects: 100% (1996/1996), 372.27 KiB | 7.16 MiB/s, done.
Resolving deltas: 100% (1424/1424), done.
Tapped 47 casks (69 files, 521.8KB).
 

 

2. brew install --cask adoptopenjdk8 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
kimfish@KimFish-MacBookPro ~ % brew install --cask adoptopenjdk8
==> Downloading https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/downl
==> Downloading from https://objects.githubusercontent.com/github-production-rel
######################################################################## 100.0%
==> Installing Cask adoptopenjdk8
==> Running installer for adoptopenjdk8; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
installer: Package name is AdoptOpenJDK
installer: Installing at base path /
installer: The install was successful.
package-id: net.adoptopenjdk.8.jdk
version: 1.8.0_292-b10
volume: /
location: 
install-time: 1649472633
🍺  adoptopenjdk8 was successfully installed!
cs

 

3.  /usr/libexec/java_home -v 1.8

1
2
kimfish@KimFish-MacBookPro ~ % /usr/libexec/java_home -1.8
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
cs

 

4. java -version

1
2
3
4
kimfish@KimFish-MacBookPro ~ % java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)
cs

 

정상적으로 설치가 된 모습이다. 설치하고나니 AdoptOpenJdk가 아닌 RedhatOpenJdk를 설치할걸 그랬나 싶긴 하지만, 일단 사용 해 보고 문제가 발생하면 나중에 다시 설치하지뭐

블로그 이미지

김생선

세상의 모든것을 어장관리

,