Selenium XVFB - 렌더러로부터 메시지를 받을 수 없습니다.

Selenium XVFB - 렌더러로부터 메시지를 받을 수 없습니다.

개요:

셀렌스크레이퍼는 완벽하게 작동합니다헤드리스 모드입니다. 알을 낳다가상 디스플레이에 오류가 표시되지 않음XVFB를 통해:

from xvfbwrapper import Xvfb

vdisplay = Xvfb()
vdisplay.start()
vdisplay.stop()

하지만 내가 언제함께 실행하려고 시도했지만 오류가 발생했습니다.그리고:

[오류] SessionNotCreatedException: 메시지: 연결 끊김으로 인해 세션이 생성되지 않았습니다. 렌더러에서 메시지를 받을 수 없습니다(세션 정보: chrome=96.0.4664.0).

역 추적:

Traceback (most recent call last):
  File "/var/task/slack_main.py", line 34, in handler
    scrape_price(asin_list)
  File "/var/task/slack_main.py", line 58, in scrape_price
    driver = webdriver.Chrome("/opt/chromedriver",options=options)
  File "/var/lang/lib/python3.9/site-packages/selenium/webdriver/chrome/webdriver.py", line 70, in __init__
    super(WebDriver, self).__init__(DesiredCapabilities.CHROME['browserName'], "goog",
  File "/var/lang/lib/python3.9/site-packages/selenium/webdriver/chromium/webdriver.py", line 92, in __init__
    RemoteWebDriver.__init__(
  File "/var/lang/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 275, in __init__
    self.start_session(capabilities, browser_profile)
  File "/var/lang/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 365, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/var/lang/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 430, in execute
    self.error_handler.check_response(response)
  File "/var/lang/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)

구성:

내 전체 Selenium 및 XVFB 구성은 다음과 같습니다.

from selenium import webdriver
from selenium_stealth import stealth
from xvfbwrapper import Xvfb

vdisplay = Xvfb()
vdisplay.start()
options = webdriver.ChromeOptions()
prefs = {"browser.downloads.dir": "//tmp//", "download.default_directory": "//tmp//", "directory_upgrade": True}
options.add_experimental_option("prefs", prefs)
options.binary_location = '/opt/chrome/chrome'
#options.add_argument('--headless') #toggled on and off when running with or without XVFB
options.add_argument('--no-sandbox')
options.add_argument("--disable-gpu")
options.add_argument("--window-size=1280x1696")
options.add_argument("--single-process")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-dev-tools")
options.add_argument("--no-zygote")
options.set_capability('unhandledPromptBehavior', 'ignore')
options.add_argument("download.default_directory=/tmp")
driver = webdriver.Chrome("/opt/chromedriver",options=options)
stealth(driver,
        languages=["en-US", "en"],
        vendor="Google Inc.",
        platform="Win32",
        fix_hairline=True,
        )
vdisplay.stop()
driver.close()

왜 모니터에 연결할 수 없나요?제 생각엔 이것이 "--headless" 스위치와 관련이 있는 것 같은데요?

버전 및 도구:

  • 셀레늄 버전 3.141.0
  • xvfbwrapper 버전 0.2.9
  • Docker는 AWS Lambda로 컴파일하고 푸시하는 데 사용됩니다.사용할 기본 이미지 (XVFB 유무에 관계없이 도커 파일은 어떤 식으로든 변경되지 않습니다.)

관련 정보