ConnectionResetErrorが発生
SeleniumでInternet Explorerを操作するコードをPythonで書いていたところ、「ConnectionResetError: [WinError 10054] 既存の接続はリモート ホストに強制的に切断されました。」が発生しました。
同じコードをGoogle Chromeで動かすと問題なく動くのでIEと(Edge)だけがこの問題に直面していました。
GitHubもStack Overflowもヒットはするんですけど、有益な情報なしとかなり厳しい状況。そもそもIEを使ってる人なんていないんでしょうね。。。うちはクソ企業なので、社内システムがIEとEdgeのみに対応なので立ち向かう必要がありますが・・・
ソースコードと実行結果
ソースコード
ドライバを指定してWebアクセスをするというだけのシンプルな実装です。
1 2 3 4 5 6 7 8 9 10 |
# webdriver の情報 from selenium import webdriver # ドライバの設定 driver = webdriver.Ie(r"C:\01_programs\webdriver\IEDriverServer.exe") driver.get('https://google.com') # ドライバの終了 driver.close() |
実行結果ログ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
>>> ================= 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のものに差し替えるだけです。
公式サイトからダウンロードして、パスを差し替えましょう。

これで無事に動くようになりました。
情報少ない上に、ログやソース読んでもわからない系の問題って厄介ですよね。