質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.40%

  • Python 3.x

    10699questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • selenium

    761questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

seleniumで[WinError 10054]を解決したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,849

omoiyari.keita

score 123

seleniumを使って IE11で指定urlを開くだけのコードですが、webdriverを読み込んだ時点で[WinError 10054]が出ているようです。
色々調べましたが解決できません。
お忙しいところ恐れ入りますが、よろしく御願いします。

from selenium import webdriver # webdriver の情報
from time import sleep

driver = webdriver.Ie(r"D:\web_driver\IEDriverServer_x64_3.9.0\IEDriverServer.exe") #IEドライバのセットアップ

sleep(3)
driver.get("http://tdc-srv2:8080/Web3s/FinFileDefault.aspx")#Web 情報を取得(Web ブラウザを開く)
driver.close()#IEドライバを閉じる
---------------------------------------------------------------------------
ConnectionResetError                      Traceback (most recent call last)
<ipython-input-15-f2a8f501f2b2> in <module>()
     25 from time import sleep
     26 
---> 27 driver = webdriver.Ie(r"D:\web_driver\IEDriverServer_x64_3.9.0\IEDriverServer.exe") #IEドライバのセットアップ
     28 #driver = webdriver.Ie(r"D:\web_driver\IEDriverServer_Win32_3.9.0\IEDriverServer.exe") #IEドライバのセットアップ
     29 sleep(3)

C:\ProgramData\Anaconda3\lib\site-packages\selenium-3.13.0-py3.6.egg\selenium\webdriver\ie\webdriver.py in __init__(self, executable_path, capabilities, port, timeout, host, log_level, log_file, options, ie_options, desired_capabilities)
     86             self,
     87             command_executor='http://localhost:%d' % self.port,
---> 88             desired_capabilities=capabilities)
     89         self._is_remote = False
     90 

C:\ProgramData\Anaconda3\lib\site-packages\selenium-3.13.0-py3.6.egg\selenium\webdriver\remote\webdriver.py in __init__(self, command_executor, desired_capabilities, browser_profile, proxy, keep_alive, file_detector, options)
    154             warnings.warn("Please use FirefoxOptions to set browser profile",
    155                           DeprecationWarning)
--> 156         self.start_session(capabilities, browser_profile)
    157         self._switch_to = SwitchTo(self)
    158         self._mobile = Mobile(self)

C:\ProgramData\Anaconda3\lib\site-packages\selenium-3.13.0-py3.6.egg\selenium\webdriver\remote\webdriver.py in start_session(self, capabilities, browser_profile)
    249         parameters = {"capabilities": w3c_caps,
    250                       "desiredCapabilities": capabilities}
--> 251         response = self.execute(Command.NEW_SESSION, parameters)
    252         if 'sessionId' not in response:
    253             response = response['value']

C:\ProgramData\Anaconda3\lib\site-packages\selenium-3.13.0-py3.6.egg\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    316 
    317         params = self._wrap_value(params)
--> 318         response = self.command_executor.execute(driver_command, params)
    319         if response:
    320             self.error_handler.check_response(response)

C:\ProgramData\Anaconda3\lib\site-packages\selenium-3.13.0-py3.6.egg\selenium\webdriver\remote\remote_connection.py in execute(self, command, params)
    470         data = utils.dump_json(params)
    471         url = '%s%s' % (self._url, path)
--> 472         return self._request(command_info[0], url, body=data)
    473 
    474     def _request(self, method, url, body=None):

C:\ProgramData\Anaconda3\lib\site-packages\selenium-3.13.0-py3.6.egg\selenium\webdriver\remote\remote_connection.py in _request(self, method, url, body)
    532                 opener = url_request.build_opener(url_request.HTTPRedirectHandler(),
    533                                                   HttpErrorHandler())
--> 534             resp = opener.open(request, timeout=self._timeout)
    535             statuscode = resp.code
    536             if not hasattr(resp, 'getheader'):

C:\ProgramData\Anaconda3\lib\urllib\request.py in open(self, fullurl, data, timeout)
    524             req = meth(req)
    525 
--> 526         response = self._open(req, data)
    527 
    528         # post-process response

C:\ProgramData\Anaconda3\lib\urllib\request.py in _open(self, req, data)
    542         protocol = req.type
    543         result = self._call_chain(self.handle_open, protocol, protocol +
--> 544                                   '_open', req)
    545         if result:
    546             return result

C:\ProgramData\Anaconda3\lib\urllib\request.py in _call_chain(self, chain, kind, meth_name, *args)
    502         for handler in handlers:
    503             func = getattr(handler, meth_name)
--> 504             result = func(*args)
    505             if result is not None:
    506                 return result

C:\ProgramData\Anaconda3\lib\urllib\request.py in http_open(self, req)
   1344 
   1345     def http_open(self, req):
-> 1346         return self.do_open(http.client.HTTPConnection, req)
   1347 
   1348     http_request = AbstractHTTPHandler.do_request_

C:\ProgramData\Anaconda3\lib\urllib\request.py in do_open(self, http_class, req, **http_conn_args)
   1319             except OSError as err: # timeout error
   1320                 raise URLError(err)
-> 1321             r = h.getresponse()
   1322         except:
   1323             h.close()

C:\ProgramData\Anaconda3\lib\http\client.py in getresponse(self)
   1329         try:
   1330             try:
-> 1331                 response.begin()
   1332             except ConnectionError:
   1333                 self.close()

C:\ProgramData\Anaconda3\lib\http\client.py in begin(self)
    295         # read until we get a non-100 response
    296         while True:
--> 297             version, status, reason = self._read_status()
    298             if status != CONTINUE:
    299                 break

C:\ProgramData\Anaconda3\lib\http\client.py in _read_status(self)
    256 
    257     def _read_status(self):
--> 258         line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
    259         if len(line) > _MAXLINE:
    260             raise LineTooLong("status line")

C:\ProgramData\Anaconda3\lib\socket.py in readinto(self, b)
    584         while True:
    585             try:
--> 586                 return self._sock.recv_into(b)
    587             except timeout:
    588                 self._timeout_occurred = True

ConnectionResetError: [WinError 10054] 既存の接続はリモート ホストに強制的に切断されました。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

導入手順が質問文に書いていないので、憶測になりますが。
seleniumでIEDriverを新規導入時のハマりポイントを提示します。

以下は上記環境設定のページにも記載がありますが、ネット上の導入手順書で漏れている事が多い点だけ。

  1. IE詳細設定拡張保護モードを有効にする。
  2. IE11以降はレジストリのサブキーとiexplore.exeDWORDキーの追加が必要です。
    HKLM\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE
    ※32bitと64bitでキーが違います。レジストリのキー追加なのでPC再起動をお忘れなく。あとレジストリ変更は自己責任で。
  3. 64Bit IEDriverで動作しないときは32Bit IEDriverを試してみてくださいな。

<< その他 >>

  1. プロキシを使用しているなら、プロキシの設定が必要になるかもです。
  2. 回答の2度手間を防ぐために、質問するときのヒントを参考に、「やったこと、調べたこと」を詳しく書いていただけると助かります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/22 22:22 編集

    まさか、こんなに手順があるとは、思いませんでした。
    非常に不可解ですが、下記の手順で解決しました。

    1. 公式サイトより IEDriverServer_Win32_3.9.0.zip をダウンロードし解凍。webdriver パス指定の場所に移動。
    2. IEの詳細設定の拡張保護モードを有効にする。
    3. IEのセキュリティを中、保護モードをオン。(制限付きサイトだけは高。なぜか変更できない)
    4. 64ビット版の指示の通り regedit でレジストリを編集
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHEを新規に作成(ご説明のアドレスと若干違う)。iexplore.exeを新規作成し DWORDを16進数で0に設定した。
    5.ブラウザの拡大を100%に設定
    6.PCを再起動

    しかし、疑問点がいくつか。もし解りましたら後学のため教えていただきたく存じます。

    (1)なぜ64bitなのにwin32のドライバーで動くのか?x64では動かない。
    (2)公式サイトによると拡張保護モードは無効にすると書いてある(逆)。

    キャンセル

  • 2018/08/23 00:43

    @omoiyari.keitaさんへ
    疑問点の2つともIEDriverは使わないので、ノウハウがほぼ無いというのが正直な返答です。

    HKLM=HKEY_LOCAL_MACHINEです。
    https://support.microsoft.com/ja-jp/help/256986/windows-registry-information-for-advanced-users

    この2点は気になるようでしたら、issueをググってみて無さそうなら公式issueを立ててみるのも一つの手かと。
    https://github.com/SeleniumHQ/selenium/issues
    質問者さんと同じような問題を抱えた人が減るかもしれませんし。

    GitHubのコードをレジストリのキー値でググってみましたが、
    キー値を使っているC++ソースコードはこの辺でしょうか。
    https://github.com/SeleniumHQ/selenium/blob/master/cpp/iedriver/BrowserFactory.cpp

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.40%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python 3.x

    10699questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • selenium

    761questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。