selenium.common.exceptions.WebDriverException:消息:通过 Python 使用 Selenium 与 ChromeDriver 和 Chrome 的会话 ID 无效

问题描述

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

I'm writing some code using Selenium, and at one point I make 7 requests, all to different websites. For the first one, this works fine. However, for others, I get a session ID error. I think that my browser is configured correctly, as I do get results from the first website. I have tried to put a WebDriverWait in between the requests, but to no avail. I think the websites might be blocking my requests. Does anyone have any idea how to solve this problem?

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

I'm sorry if this is something stupid or if I'm doing anything wrong, I'm quite new ^^

提前致谢!

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)


解决方案

无效的会话 ID

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

invalid session id

The invalid session ID error is a WebDriver error that occurs when the server does not recognize the unique session identifier. This happens if the session has been deleted or if the session ID is invalid.

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

A WebDriver session can be deleted through either of the following ways:

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

  • Explicit session deletion: A WebDriver session is explicitly deleted when explicitly invoking the quit() method as follows:

  • 代码块:

  • Code Block:

from selenium import webdriver
from selenium.common.exceptions import InvalidSessionIdException

driver = webdriver.Chrome(executable_path=r'C:UtilityBrowserDriverschromedriver.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)

  • 控制台输出:

  • Console Output:

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

  • 隐式会话删除:当您关闭最后一个窗口或选项卡调用 close() 方法时,会隐式删除 WebDriver 会话,如下所示:

    Implicit session deletion: A WebDriver session is implicitly deleted when you close the last window or tab invoking close() method as follows:

    • 代码块:

    • Code Block:

    driver = webdriver.Chrome(executable_path=r'C:UtilityBrowserDriverschromedriver.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)
    

  • 控制台输出:

  • Console Output:

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

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

    As the first one request works fine but for others you get a session ID error most possibly the WebDriver controled Web Browser is getting detected and hence blocking the next requests.

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

    There are different reasons for the WebDriver controled Web Browser to get detected and simultaneously get blocked. You can find a couple of detailed discussion in:

    • recaptcha 3 怎么知道我?m 使用 selenium/chromedriver?
    • Selenium 和非无头浏览器保持要求验证码

    相关文章