【问题标题】:selenium.common.exceptions.WebDriverException: Message: invalid session id using Selenium with ChromeDriver and Chrome through Pythonselenium.common.exceptions.WebDriverException:消息:通过 Python 使用 Selenium 与 ChromeDriver 和 Chrome 的会话 ID 无效
【发布时间】:2019-10-22 07:36:03
【问题描述】:

我正在使用 Selenium 编写一些代码,并且有一次我向不同的网站发出 7 个请求。对于第一个,这很好用。但是,对于其他人,我收到会话 ID 错误。我认为我的浏览器配置正确,因为我确实从第一个网站获得了结果。我试图在请求之间放置一个 WebDriverWait,但无济于事。我认为这些网站可能会阻止我的请求。有谁知道如何解决这个问题?

如果这是愚蠢的事情或者我做错了什么,我很抱歉,我是新手^^

提前致谢!

Traceback (most recent call last):
  File "/home/cena/PycharmProjects/Frikandelbroodje/main.py", line 56, in <module>
    dirk_price = get_price(dirk_url, dirk_classname)
  File "/home/cena/PycharmProjects/Frikandelbroodje/main.py", line 44, in get_price
    browser.get(url)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 333, in get
    self.execute(Command.GET, {'url': url})
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: invalid session id
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Linux 4.15.0-50-generic x86_64)

【问题讨论】:

    标签: python selenium google-chrome webdriver selenium-chromedriver


    【解决方案1】:

    invalid session id

    无效的会话 ID 错误是一个WebDriver error,当服务器无法识别唯一的会话标识符时发生。如果会话已被删除会话 ID 无效,则会发生这种情况。

    可以通过以下任一方式删除 WebDriver 会话:

    • Explicit session deletion:显式调用quit() 方法时,WebDriver 会话被显式删除,如下所示:

      • 代码块:

        from selenium import webdriver
        from selenium.common.exceptions import InvalidSessionIdException
        
        driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
        print("Current session is {}".format(driver.session_id))
        driver.quit()
        try:
            driver.get("https://www.google.com/")
        except Exception as e:
            print(e.message)
        
      • 控制台输出:

        Current session is a9272550-c4e5-450f-883d-553d337eed48
        No active session with ID a9272550-c4e5-450f-883d-553d337eed48
        
    • Implicit session deletion:当您关闭最后一个调用close() 方法的窗口或选项卡时,WebDriver 会话将被隐式删除,如下所示:

      • 代码块:

        driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
        print("Current session is {}".format(driver.session_id))
        # closes current window/tab
        driver.close()
        try:
            driver.get("https://www.google.com/")
        except Exception as e:
            print(e.message)
        
      • 控制台输出:

        Current session is a9272550-c4e5-450f-883d-553d337eed48
        No active session with ID a9272550-c4e5-450f-883d-553d337eed48
        

    结论

    由于第一个请求工作正常,但对于其他请求,您会收到 会话 ID 错误,很可能是 WebDriver 控制的 Web 浏览器 正在被检测到并因此阻止下一个请求。

    WebDriver 控制的Web 浏览器 被检测到并同时被阻止的原因有很多。您可以在以下位置找到一些详细的讨论:

    【讨论】:

    • 感谢您的澄清!我会调查这些讨论!
    【解决方案2】:

    浏览器页面崩溃可能导致 InvalidSessionIdException。 Selenium 对我们说:session deleted because of page crash。出现错误时检查您的浏览器页面是否仍然存在。

    这里是这个案例的回溯示例:

    [2021-06-28 15:05:43,787: ERROR/ForkPoolWorker-2] Message: invalid session id
    Traceback (most recent call last):
      ...
      File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 333, in get
        self.execute(Command.GET, {'url': url})
      File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
        self.error_handler.check_response(response)
      File "/usr/local/lib/python3.7/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: session deleted because of page crash
    from tab crashed
      (Session info: chrome=83.0.4103.61)
    
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      ...
      File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 580, in find_elements_by_class_name
        return self.find_elements(by=By.CLASS_NAME, value=name)
      File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 1007, in find_elements
        'value': value})['value'] or []
      File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
        self.error_handler.check_response(response)
      File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
    

    如果您想了解一些技术细节,请查看Chromium sources,您可以在其中找到字符串session deleted because of page crash

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,原因是我以错误的格式编写了 url - 不是这样,这是正确的:

      self.driver.get('https://twitter.com')
      

      但是这样:
      self.driver.get('twitter.com')
      

      也许你有同样的问题。如果没有,只需检查所有链接并确保所有链接的格式都正确

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-18
        • 2020-04-16
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 2019-12-15
        相关资源
        最近更新 更多