【解決】Selenium ValueError: Timeout value connect was..., but it must be an int, float or None.
Python × Seleniumで以下エラーが出た時の対処法について。
少し長いですが、エラーメッセージを全部貼ります。
> python test.py
C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\__init__.py:89: RequestsDependencyWarning: urllib3 (2.0.4) or chardet (3.0.4) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
Traceback (most recent call last):
File "C:\Users\me\desktop\test.py", line 8, in <module>
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 76, in __init__
RemoteWebDriver.__init__(
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 319, in execute
response = self.command_executor.execute(driver_command, params)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 374, in execute
return self._request(command_info[0], url, body=data)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 397, in _request
resp = self._conn.request(method, url, body=body, headers=headers)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\_request_methods.py", line 118, in request
return self.request_encode_body(
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\_request_methods.py", line 217, in request_encode_body
return self.urlopen(method, url, **extra_kw)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\poolmanager.py", line 432, in urlopen
conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\poolmanager.py", line 303, in connection_from_host
return self.connection_from_context(request_context)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\poolmanager.py", line 328, in connection_from_context
return self.connection_from_pool_key(pool_key, request_context=request_context)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\poolmanager.py", line 351, in connection_from_pool_key
pool = self._new_pool(scheme, host, port, request_context=request_context)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\poolmanager.py", line 265, in _new_pool
return pool_cls(host, port, **request_context)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 196, in __init__
timeout = Timeout.from_float(timeout)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\util\timeout.py", line 190, in from_float
return Timeout(read=timeout, connect=timeout)
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\util\timeout.py", line 119, in __init__
self._connect = self._validate_timeout(connect, "connect")
File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\util\timeout.py", line 156, in _validate_timeout
raise ValueError(
ValueError: Timeout value connect was <object object at 0x00000209D62C86D0>, but it must be an int, float or None.
あなたの環境でも上記と同じエラーメッセージが出ている場合、requestsとurllib3の依存性問題(サポートバージョンの不一致)が発生しており、本記事と同じ手順で直る可能性が高いです。
ちなみに、ぼくの事象発生時の環境は以下でした。
- Python 3.9.6
- Selenium 3.141.0
- Windows / Mac両方で同じエラーが出る
ー もくじ ー
Python Selenium ValueError: Timeout value connect was..., but it must be an int, float or None. 解決手順
以下、2ステップです。
- pip check で依存性の問題有無を確認
- urllib3 をダウングレード
1. pip check で依存性の問題有無を確認
pip checkとコマンドラインで実行してみてください。
pip check
requests 2.26.0 has requirement urllib3<1.27,>=1.21.1, but you have urllib3 2.0.4.
訳:requests 2.26.0 は、urllib3 1.27以下1.21.1以上を必要としますが、2.0.4がインストールされています
...と表示されたとおり、現在使っているrequestsのバージョンから見たurllib3のバージョンに問題がある(バージョンが上すぎる)ことを示しています。
次の手順でこれを解消します。
ちなみに:
もし、以下のように「依存性に問題なし」と表示された場合は本記事で解説する事象とは別事象と考えられます...
pip check
No broken requirements found.
また、元のエラーメッセージに「RequestsDependencyWarning: urllib3 (2.0.4) or chardet (3.0.4) doesn't match a supported version!」とある通り、urllib3ではなくchardetというライブラリ側のバージョン不一致の可能性もあります。
その場合は、以下手順よりurllib3をchardetに読み替えて操作してください。
2. urllib3 をダウングレード
pip checkの結果は環境によって異なるため、あなたの環境に数字を読み替えてください。
requests 2.26.0 has requirement urllib3<1.27,>=1.21.1, but you have urllib3 2.0.4.
requests 2.26.0 は、urllib3 1.27以下1.21.1以上を必要としますが、2.0.4がインストールされています
とのことなので、以下urllib3のリリース履歴から、上記青字の範囲内で合致するもっとも新しいものを探します。
https://pypi.org/project/urllib3/#history
1.27以下 1.21.1以上だと、1.26.16が当てはまりますね。
というわけで、2.0.4 → 1.26.16へダウングレードします。
pip install urllib3==1.26.16
Collecting urllib3==1.26.16
Obtaining dependency information for urllib3==1.26.16 from https://files.pythonhosted.org/packages/c5/05/c214b32d21c0b465506f95c4f28ccbcba15022e000b043b72b3df7728471/urllib3-1.26.16-py2.py3-none-any.whl.metadata
Downloading urllib3-1.26.16-py2.py3-none-any.whl.metadata (48 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.4/48.4 kB 583.7 kB/s eta 0:00:00
Downloading urllib3-1.26.16-py2.py3-none-any.whl (143 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.1/143.1 kB 1.3 MB/s eta 0:00:00
Installing collected packages: urllib3
Attempting uninstall: urllib3
Found existing installation: urllib3 2.0.4
Uninstalling urllib3-2.0.4:
Successfully uninstalled urllib3-2.0.4
Successfully installed urllib3-1.26.16
元のバージョンがアンインストールされ、1.26.16がインストールされればOK。
これで、エラーとなっていたプログラムを起動したら無事に動くようになりました。