簡體   English   中英

selenium.common.exceptions.WebDriverException: Message: invalid session id using Selenium with ChromeDriver and Chrome through Python

[英]selenium.common.exceptions.WebDriverException: Message: invalid session id using Selenium with ChromeDriver and Chrome through Python

我正在使用 Selenium 編寫一些代碼,並且有一次我向不同的網站發出 7 個請求。 對於第一個,這很好用。 但是,對於其他人,我收到 session 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)

無效的會話 ID

無效會話 ID錯誤是當服務器無法識別唯一會話標識符時發生的WebDriver 錯誤 如果會話已被刪除會話 ID 無效,則會發生這種情況。

可以通過以下任一方式刪除 WebDriver 會話:

  • 顯式會話刪除:當顯式調用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
  • 隱式會話刪除:當您關閉最后一個窗口或選項卡調用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 瀏覽器被檢測到並同時被阻止有不同的原因。 您可以在以下位置找到一些詳細的討論:

瀏覽器頁面崩潰可能導致 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 源代碼,您可以在其中找到 string session deleted because of page crash

我遇到了這個問題,原因是我以錯誤的格式編寫了 url - 不是這樣,這是正確的:

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

但是這樣:
 self.driver.get('twitter.com')

也許你有同樣的問題。 如果不是,只需檢查所有鏈接並確保所有鏈接的格式都正確

我收到此錯誤消息是因為我在 docker 中運行 Selenium 並且我沒有安裝足夠的交換內存,所以它會在幾頁后崩潰。

為了解決這個問題,我使用了相同的 docker 命令,但在 docker run 之后添加了-v /dev/shm:/dev/shm

如果你有這個

docker run -d -p 5901:5900 -p 127.0.0.1:4445:4444 selenium/standalone-chrome

然后改成這個

docker run -v /dev/shm:/dev/shm -d -p 5901:5900 -p 127.0.0.1:4445:4444 selenium/standalone-chrome

我在這里這里找到了這個信息。

在我的情況下,我執行driver.close()然后嘗試訪問已經關閉的驅動程序的 current_url 屬性

這是我的錯誤代碼導致此錯誤消息的原因:

url = 'http://localhost:5000/traning'
webpage = driver.get(url)
time.sleep(2)
driver.close()
return driver.current_url

這將返回錯誤:

selenium.common.exceptions.InvalidSessionIdException:消息:無效 session id

這是解決方案,只需在關閉驅動程序之前保存當前 url 和變量中的所有數據以返回此數據

driver = setDriver()
url = 'http://localhost:5000/traning'
webpage = driver.get(url)
current_url = driver.current_url
time.sleep(2)
driver.close()
return current_url

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 selenium.common.exceptions.WebDriverException: 消息:無法通過 Selenium Python 使用 ChromeDriver Chrome 連接到服務錯誤 selenium.common.exceptions.WebDriverException:消息:未知錯誤:無法使用帶有Selenium Python的ChromeDriver Chrome創建Chrome進程 selenium.common.exceptions.WebDriverException:消息:未知錯誤:Chrome 無法啟動:在 Python 中使用 ChromeDriver 和 Selenium 崩潰 python, selenium, chromedriver &#39;selenium.common.exceptions.WebDriverException: 消息:無法訪問 u&#39;chrome selenium.common.exceptions.WebDriverException:消息:使用 find_element_by_id Selenium 和 ChromeDriver 時出現 chrome 無法訪問錯誤 selenium.common.exceptions.WebDriverException:消息:已斷開連接:通過Python通過ChromeDriver和Selenium收到了Inspector.detached事件 selenium.common.exceptions.WebDriverException:消息:未知錯誤:無法使用 ChromeDriver Chrome Selenium 創建 Chrome 進程錯誤 selenium.common.exceptions.WebDriverException:消息:未知錯誤:Chrome無法啟動:使用ChromeDriver Chrome和Selenium異常退出 selenium.common.exceptions.WebDriverException:消息:無效參數:無法識別的功能:帶有Selenium和ChromeDriver 77.0的chromeOptions selenium.common.exceptions.WebDriverException:消息:Linux 上的 ChromeDriver Selenium Python 服務 /usr/bin/google-chrome 意外退出
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM