selenium with Firefox driver in Windows raise NoSuchWindowException

我寫的程式,在Windows 上會出錯,但相同的程式碼在 macOS 上沒有出錯,很奇怪。是 macOS 那邊的架構比較漂亮嗎?呵呵呵。

有錯誤的環境:

  • Windows 7
  • Python 3.7.9
  • selenium 4.0
  • geckodriver 0.30

顯示錯誤訊息如下:

  File "Z:\tixcraft\selenium\webdriver\remote\webdriver.py", line 400, in execute
    self.error_handler.check_response(response)
  File "Z:\tixcraft\selenium\webdriver\remote\errorhandler.py", line 236, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchWindowException: Message: Browsing context has
been discarded
Stacktrace:
WebDriverError@chrome://remote/content/shared/webdriver/Errors.jsm:183:5
NoSuchWindowError@chrome://remote/content/shared/webdriver/Errors.jsm:437:5
assert.that/<@chrome://remote/content/shared/webdriver/Assert.jsm:435:13
assert.open@chrome://remote/content/shared/webdriver/Assert.jsm:143:4
GeckoDriver.prototype.navigateTo@chrome://remote/content/marionette/driver.js:82
1:34
despatch@chrome://remote/content/marionette/server.js:306:40
execute@chrome://remote/content/marionette/server.js:279:16
onPacket/<@chrome://remote/content/marionette/server.js:252:20
onPacket@chrome://remote/content/marionette/server.js:253:9
_onJSONObjectReady/<@chrome://remote/content/marionette/transport.js:500:20

觸發錯誤的程式碼:

driver.get(url)

執行畫面:


geckodriver 下載:
https://github.com/mozilla/geckodriver/releases

geckodriver 使用說明:
https://firefox-source-docs.mozilla.org/testing/geckodriver/index.html

修改後的完整程式碼:
https://github.com/max32002/tixcraft_bot/


這個發生的原因很奇怪,透過只寫簡單的程式,發現是沒有問題。所以慢慢把簡單的程式加入為複雜程式之後,發現是類似 memory leak 的錯誤,如果有去開檔,而且是在 python 的global 層,會因為記憶體可能沒有去回收,造成上面的錯誤。以上全是我個人的猜測。

解決的辦法是不要寫程式在 script 的第一層(內縮值=0),把開檔存取放在 def 的 function 裡,就解決了。

其實,這應該很好避免,結果花了大約8小時去retry , 去 google 相關解法,結果是都沒看到其他人有遇到,呵呵呵。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *