ConnectionResetErrorが発生
SeleniumでInternet Explorerを操作するコードをPythonで書いていたところ、「ConnectionResetError: [WinError 10054] 既存の接続はリモート ホストに強制的に切断されました。」が発生しました。
同じコードをGoogle Chromeで動かすと問題なく動くのでIEと(Edge)だけがこの問題に直面していました。
GitHubもStack Overflowもヒットはするんですけど、有益な情報なしとかなり厳しい状況。そもそもIEを使ってる人なんていないんでしょうね。。。うちはクソ企業なので、社内システムがIEとEdgeのみに対応なので立ち向かう必要がありますが・・・
ソースコードと実行結果
ソースコード
ドライバを指定してWebアクセスをするというだけのシンプルな実装です。
# webdriver の情報 from selenium import webdriver # ドライバの設定 driver = webdriver.Ie(r"C:\01_programs\webdriver\IEDriverServer.exe") driver.get('https://google.com') # ドライバの終了 driver.close()
実行結果ログ
>>>
================= RESTART: C:/Users/userName/Desktop/testCode.py =================
Traceback (most recent call last):
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py", line 601, in urlopen
chunked=chunked)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py", line 387, in _make_request
six.raise_from(e, None)
File "", line 2, in raise_from
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py", line 383, in _make_request
httplib_response = conn.getresponse()
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\http\client.py", line 1331, in getresponse
response.begin()
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\http\client.py", line 297, in begin
version, status, reason = self._read_status()
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\http\client.py", line 258, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\socket.py", line 586, in readinto
return self._sock.recv_into(b)
ConnectionResetError: [WinError 10054] 既存の接続はリモート ホストに強制的に切断されました。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/userName/Desktop/testCode.py", line 5, in
driver = webdriver.Ie(r"C:\01_programs\webdriver\IEDriverServer64.exe")
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\ie\webdriver.py", line 89, in __init__
desired_capabilities=capabilities)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 156, in __init__
self.start_session(capabilities, browser_profile)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 250, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 317, in execute
response = self.command_executor.execute(driver_command, params)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 375, in execute
return self._request(command_info[0], url, body=data)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 402, in _request
resp = http.request(method, url, body=body, headers=headers)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\request.py", line 70, in request
**urlopen_kw)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\request.py", line 148, in request_encode_body
return self.urlopen(method, url, **extra_kw)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\poolmanager.py", line 321, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py", line 639, in urlopen
_stacktrace=sys.exc_info()[2])
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\util\retry.py", line 357, in increment
raise six.reraise(type(error), error, _stacktrace)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\packages\six.py", line 685, in reraise
raise value.with_traceback(tb)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py", line 601, in urlopen
chunked=chunked)
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py", line 387, in _make_request
six.raise_from(e, None)
File "", line 2, in raise_from
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py", line 383, in _make_request
httplib_response = conn.getresponse()
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\http\client.py", line 1331, in getresponse
response.begin()
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\http\client.py", line 297, in begin
version, status, reason = self._read_status()
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\http\client.py", line 258, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "C:\Users\userName\AppData\Local\Continuum\anaconda3\lib\socket.py", line 586, in readinto
return self._sock.recv_into(b)
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, '既存の接続はリモート ホストに強制的に切断されました。', None, 10054, None))
>>>
原因と解決方法
原因
実行環境がWidows10(64bi)とIE(64bit)とWebDriver(64bit用)を使用していたのが原因でした。
64bit環境で動作していたので、何も考えずに64bitのWebDriver入れてました。何がいけないのかさっぱりですが、どうも相性が悪い場合があるらしい。他のPCで同じことを試してみたら64bitのWebDriverで普通に動いたので、本当によくわかりません。
解決方法
IEのWebDriverを32bitのものに差し替えるだけです。
公式サイトからダウンロードして、パスを差し替えましょう。
これで無事に動くようになりました。
情報少ない上に、ログやソース読んでもわからない系の問題って厄介ですよね。