[英]selenium.common.exceptions.WebDriverException: Message: Can not connect to the Service error using ChromeDriver Chrome through Selenium 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錯誤是當服務器無法識別唯一會話標識符時發生的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.