selenium.common.exceptions.SessionNotCreatedException:消息:会话不是从选项卡创建的使用 ChromeDriver Chrome Selenium Python 崩溃

JB_*_*JB_ 4 selenium google-chrome python-3.x selenium-chromedriver

我在尝试访问脚本请求的 url 时显然遇到了这个错误,没有特定的。我不明白这个错误的确切原因,但我想处理它,以免在它发生时中止脚本。

这使重复,但不能解决我的问题:如何避免错误:selenium.common.exceptions.SessionNotCreatedException:消息:会话不是从选项卡创建的崩溃

代码:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--incognito')
chrome_options.add_argument('--headless')
driver = webdriver.Chrome("/driver/chromedriver", options=chrome_options)
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback (most recent call last):
  File "scripts/page11.py", line 15, in <module>
    driver = webdriver.Chrome(BASE_WEB_DRIVER, options=chrome_options)
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/chrome/webdriver.py", line 76, in __init__
    RemoteWebDriver.__init__(
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: session not created
from tab crashed
  (Session info: headless chrome=78.0.3904.108)
Run Code Online (Sandbox Code Playgroud)

Chrome:Google Chrome 78.0.3904.108和 driver:ChromeDriver 78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904@{#877})兼容。

Deb*_*anB 5

这个错误信息...

  selenium.common.exceptions.SessionNotCreatedException: Message: session not created
  from tab crashed
(Session info: headless chrome=78.0.3904.108)
Run Code Online (Sandbox Code Playgroud)

...暗示ChromeDriver无法启动/生成新的浏览上下文,Chrome 浏览器会话。


分析与解决

这个问题有多种解决方案。但是,根据UnknownError: session deleted because page crash from tab crashed这个问题可以通过以下任一解决方案解决:

  • 添加以下内容chrome_options

    chrome_options.add_argument('--no-sandbox')         
    
    Run Code Online (Sandbox Code Playgroud)
  • 使其工作的另一个选择是添加chrome_optionsas --disable-dev-shm-usage。这将强制 Chrome 使用该/tmp目录。这可能会减慢执行速度,因为将使用磁盘而不是内存。

    chrome_options.add_argument('--disable-dev-shm-usage')
    
    Run Code Online (Sandbox Code Playgroud)
  • 如此有效,您的代码块将是:

    from bs4 import BeautifulSoup
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--ignore-certificate-errors')
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-dev-shm-usage')
    driver = webdriver.Chrome(executable_path='/driver/chromedriver', options=chrome_options)
    
    Run Code Online (Sandbox Code Playgroud)

从选项卡崩溃

来自选项卡崩溃的WIP(正在进行的工作)与Chromium 团队现在已经有一段时间了,这与Linux 试图始终将 /dev/shm 用于非可执行内存有关。以下是参考资料:


参考

您可以在未知错误中找到详细讨论:会话因未知错误导致页面崩溃而删除:无法确定使用 ChromeDriver Selenium 崩溃的选项卡的加载状态

  • 我按照建议进行了更正,但仍然是同样的错误。还有其他建议吗? (2认同)