web-dev-qa-db-ja.com

ConnectionAbortedError:[WinError 10053]確立された接続は、ホストマシンのソフトウェアによって中止されました

何らかの理由で、ネストされたwebdriverインスタンスを開くと、次のエラーonlyが表示されます。ここで何が起こっているのか分かりません。

私はWindows 1geckodriver 0.21.0、Python 3.7。を使用しています

ConnectionAbortedError:[WinError 10053]

An established connection was aborted by the software in your Host machine

正常に動作しているスクリプトの一部

tab_backers = ff.find_element_by_xpath('//a[@gogo-test="backers_tab"]')

try:
    funding_backers_count = int(''.join(filter(str.isdigit, str(tab_backers.text))))
except ValueError:
    funding_backers_count = 0

if funding_backers_count > 0:
    tab_backers.click()

    see_more_backers = WebDriverWait(ff, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//ui-view//a[text()="See More Backers"]'))
    )
    clicks = 0
    while clicks < 0:
        clicks += 1
        ff.WebDriverWait(ff, 5).until(
            see_more_backers.click()
        )

    for container in ff.find_elements_by_xpath('//ui-view//div[@class="campaignBackers-pledge ng-scope"]'):
        backers_profile = container.find_elements_by_xpath('./*/div[@class="campaignBackers-pledge-backer-details"]/a')
        if len(backers_profile) > 0:
            backers_profile = backers_profile[0].get_attribute('href') 
        else:
            backers_profile = 'Unknown'
        backers_name = safe_encode(container.find_element_by_xpath('(./*/div[@class="campaignBackers-pledge-backer-details"]/*)[1]').text)
        backers_timestamp = container.find_element_by_xpath('./*/div[@class="campaignBackers-pledge-backer-details"]/div[contains(@class, "campaignBackers-pledge-backer-details-note")]').text
        backers_contribution = container.find_element_by_xpath('./*//*[contains(@class, "campaignBackers-pledge-amount-bold")]').text
        if backers_contribution != 'Private':
            backers_contribution = int(''.join(filter(str.isdigit, str(backers_contribution))))
        if backers_profile != 'Unknown':

システムが接続を中止するスクリプトの一部

            _ff = create_webdriver_instance()
            _ff.get(backers_profile)
            _ff.quit()

トレースバック

Traceback (most recent call last):
  File "C:\Users\Anthony\Desktop\test.py", line 271, in <module>
    backers_profile = container.find_elements_by_xpath('./*/div[@class="campaignBackers-pledge-backer-details"]/a')
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\site-packages\Selenium\webdriver\remote\webelement.py", line 381, in find_elements_by_xpath
    return self.find_elements(by=By.XPATH, value=xpath)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\site-packages\Selenium\webdriver\remote\webelement.py", line 680, in find_elements
    {"using": by, "value": value})['value']
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\site-packages\Selenium\webdriver\remote\webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\site-packages\Selenium\webdriver\remote\webdriver.py", line 318, in execute
    response = self.command_executor.execute(driver_command, params)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\site-packages\Selenium\webdriver\remote\remote_connection.py", line 472, in execute
    return self._request(command_info[0], url, body=data)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\site-packages\Selenium\webdriver\remote\remote_connection.py", line 495, in _request
    self._conn.request(method, parsed_url.path, body, headers)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1275, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1224, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1055, in _send_output
    self.send(chunk)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 977, in send
    self.sock.sendall(data)
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your Host machine

geckodriver.log

ここにあるのは codepen、 です。これはwayyyが長すぎるためです!

create_webdriver_instance Function

def create_webdriver_instance():
    options = Options()
    options.add_argument('-headless')
    try:
        ua_string = random.choice(ua_strings)
        profile = webdriver.FirefoxProfile()
        profile.set_preference('general.useragent.override', ua_string)
        return webdriver.Firefox(profile) # profile, firefox_options=options
    except IndexError as error:
        print('\nSection: Function to Create Instances of WebDriver\nCulprit: random.choice(ua_strings)\nIndexError: {}\n'.format(error))
        return webdriver.Firefox() # firefox_options=options


接続が中断される原因は何でもありますか?


12
BugWhisperer

このエラーメッセージ...

ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your Host machine

...新しいWebBrowsing Sessionの初期化、つまりFirefox Browserセッションは中止されました。


確立された接続は、ホストマシンのソフトウェアによって中止されました

あなたのコードの試みによると、エラーは明らかにcreate_webdriver_instance()関数を出力しています:

try:
    ua_string = random.choice(ua_strings)
    profile = webdriver.FirefoxProfile()
    profile.set_preference('general.useragent.override', ua_string)
    return webdriver.Firefox(profile)

そして:

except IndexError as error:
    print('\nSection: Function to Create Instances of WebDriver\nCulprit: random.choice(ua_strings)\nIndexError: {}\n'.format(error))
    return webdriver.Firefox()

したがって、return webdriver.Firefox(profile)またはwebdriver.Firefox()の中でこの問題に直面している関数は明確ではありません。

おそらく codepen 内のログをよく見ると、webdriver.Firefox(profile)からエラーが発生していることが示唆されます。


理由

このエラーの背後には複数の理由があります。

  • アンチウイルスソフトウェアの存在
  • ポートをブロックするファイアウォール。
  • ネットワーク設定。
  • 問題は CORS によって引き起こされる可能性があります。
  • HTTPキープアライブ接続の有効化により

解決

最初のステップは、ソフトウェアがコンピューターのサーバーとの接続をブロックしているかどうかを調べることです。それとは別に、考えられる解決策は次のとおりです。

  • ウイルス対策ソフトウェアを無効にします。
  • firewallを無効にします。
  • システムの/ etc/hostsに次のエントリが含まれていることを確認します。

    127.0.0.1   localhost.localdomain localhost
    
  • ホストマシンのソフトウェアによって接続が中断された のように、http://localhost:8080/reactive-commandsのようなlocalhostルートを許可する必要があります

  • Selenium Python clientを使用して再接続せずに5秒間非アクティブにすると、geckodriver 0.21.0へのキープアライブ接続が切断されました

    • AutomatedTester:この問題は、リクエストの実行時に接続されていないためではありません。それが問題であれば、httplib.HTTPConnection例外がスローされます。代わりに、接続を行って閉じて応答を解析しようとすると、BadStatusLineがスローされます。これは、python stdlibバグ、httplibバグ、またはSeleniumバグになります。 urllibをKeep-Alive接続で同じ欠陥を示さない別のものに置き換えるPythonクライアントは、WIPです。

    • andreastt:geckodriverチームは、サーバー側のタイムアウト値をより合理的な値に拡張することに取り組んでいます。私が言ったように、これはこの問題を軽減するのに役立ちますが、根本的には修正しません。いずれにせよ、永続的なHTTP接続から実際のメリットを得るには5秒はおそらく低すぎるので、60秒のような値に増やすとパフォーマンスが向上するのは事実です。


結論

Selenium 3.14.0がリリースされました。この問題の影響を受けている場合は、それに応じてアップグレードしてください。


参照:

5
DebanjanB

ドキュメント のように:

ソフトウェアにより接続が中断されました。おそらく、データ送信タイムアウトまたはプロトコルエラーが原因で、確立された接続がホストコンピューターのソフトウェアによって中止されました。

考えられる理由:

  1. タイムアウトまたはその他のネットワークレベルのエラー。
  2. ネットワーク接続が停止しました
  3. 開いている時間が長すぎるため、ファイアウォールが接続を閉じました
  4. プロセスが完了する前に接続が閉じられました
  5. AntiVirusは接続をブロックします

や。。など。

また、geckodriver 0.21.0geckodriver 0.20.1にダウングレードしてください。ダウンロードできます こちらgeckodriver 0.21.0に問題があるようです https://stackoverflow.com/a/51236719/8625512

PS:

options.add_argument('-headless')

する必要があります:

options.add_argument('--headless')
4
Andrei Suvorkov

この問題は私に起こり、エラーが断続的に発生したため、最初はファイアウォールまたはウイルス対策の問題であると考えていましたが、はるかに簡単でした。

[送信]ボタンがクリックされたときに2回送信されたフォームがありました。ボタンはtype = "submit"に設定され、このボタンがクリックされたときにjavascriptコードがこのフォームを送信しました。ボタンをtype = "button"に変更して、問題を解決しました。

1
Carlos Ribeiro

Windowsは、フォルダーへのアクセスを制御します。これは、許可されていないアプリが重要なファイルにアクセスするのをブロックすることです(Windowsによってインストールされるほとんどすべてのものを意味します)。これは、マルウェアによるデータの暗号化と身代金を防ぐためです。

Windowsは、アプリをブロックすると通知をポップアップ表示します。

制御されたフォルダーアクセスを介してアプリ/プログラムへのアクセスを許可できます。

0
user899575