web-dev-qa-db-fra.com

ConnectionAbortedError: [WinError 10053] Une connexion établie a été abandonnée par le logiciel de votre ordinateur hôte.

Pour une raison quelconque, l'erreur suivante s'affiche seulement lorsque j'ouvre une instance imbriquée webdriver. Aucune idée de ce qui se passe ici.

J'utilise Windows 10, geckodriver 0.21.0, et Python 3.7.

ConnectionAbortedError: [WinError 10053]

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

Partie du script qui fonctionne bien

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':

Partie du script provoquant l'abandon de la connexion par le système

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

Traceback

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

Le voici dans un codepen, puisqu'il est trop long!

Fonction create_webdriver_instance

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


Quelqu'un a-t-il la moindre idée de ce qui pourrait provoquer l'interruption de la connexion?


12
BugWhisperer

Ce message d'erreur ...

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

... implique que l’initialisation d’une nouvelle session WebBrowsing , c’est-à-dire du navigateur Firefox la session a été interrompue.


Une connexion établie a été interrompue par le logiciel sur votre ordinateur hôte.

Selon votre tentative de code, l'erreur est clairement corrigée create_webdriver_instance() fonction qui contient:

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

Et:

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

Il n’est donc pas clair à partir de quelle fonction vous êtes confronté à ce problème parmi return webdriver.Firefox(profile) ou webdriver.Firefox().

Peut-être un examen plus attentif des journaux dans codepen suggère-t-il que l'erreur provient de webdriver.Firefox(profile).


Les raisons

Il peut y avoir plusieurs raisons derrière cette erreur:

  • Présence de logiciels anti-virus.
  • Pare-feu bloquant les ports.
  • Configuration du réseau.
  • Le problème peut être causé par CORS .
  • En raison de l'activation des connexions persistantes HTTP

Solution

La première étape consiste à déterminer si un logiciel bloque la connexion vers/depuis le serveur de votre ordinateur. En dehors de cela, les solutions probables sont:

  • Désactiver les logiciels anti-virus.
  • Désactiver pare-feu.
  • Assurez-vous que/etc/hosts sur votre système contient l'entrée suivante:

    127.0.0.1   localhost.localdomain localhost
    
  • Selon la connexion a été annulée par le logiciel de votre ordinateur hôte vous devez autoriser les itinéraires locaux tels que http://localhost:8080/reactive-commands

  • Selon La connexion Keep-Alive à geckodriver 0.21.0 a été abandonnée après 5 secondes d’inactivité sans reconnexion en utilisant Selenium Python client

    • AutomatedTester : Ce problème n'est pas dû au fait que nous ne sommes pas connectés au moment de faire une demande. Si tel était le problème, une exception httplib.HTTPConnection serait générée. À la place, une BadStatusLine est renvoyée lorsque nous établissons une connexion, la fermons et essayons d'analyser la réponse. Maintenant, cela pourrait être le python bug stdlib, bug httplib ou Selenium. A Python client pour remplacer urllib par quelque chose qui ne présente pas le même défaut avec Les connexions Keep-Alive sont [~ # ~] wip [~ # ~].

    • andreastt : L'équipe geckodriver travaille à l'extension de la valeur du délai d'attente côté serveur à une valeur plus raisonnable. Comme je l'ai dit, cela contribuerait à atténuer le problème, mais non à le résoudre fondamentalement. Dans tous les cas, il est vrai que cinq secondes sont probablement trop faibles pour tirer le meilleur parti des connexions HTTP persistantes, et que les augmenter à quelque chose comme 60 secondes aurait de meilleures performances.


Conclusion

Selenium 3.14.0 vient d'être publié. Si vous êtes concerné par ce problème, veuillez mettre à niveau en conséquence.


Les références:

5
DebanjanB

Comme documentation dit:

Le logiciel a provoqué la déconnexion. Une connexion établie a été interrompue par le logiciel sur votre ordinateur hôte, probablement en raison d'un délai d'attente de transmission des données ou d'une erreur de protocole.

Raisons possibles:

  1. Timeout ou autre erreur au niveau du réseau.
  2. Connexion réseau est mort
  3. Le pare-feu a fermé la connexion car elle était ouverte trop longtemps
  4. La connexion a été fermée avant la fin du processus
  5. AntiVirus bloque la connexion

et etc.

Essayez également de déclasser geckodriver 0.21.0 à geckodriver 0.20.1. Vous pouvez le télécharger ici . Il semble y avoir un problème avec geckodriver 0.21.0https://stackoverflow.com/a/51236719/8625512

PS:

options.add_argument('-headless')

devrait être:

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

Ce problème m'est arrivé et comme l'erreur était intermittente, j'ai d'abord pensé qu'il s'agissait d'un problème de pare-feu ou d'antivirus, mais c'était beaucoup plus simple.

J'avais un formulaire qui était soumis deux fois lorsque le bouton ENVOYER a été cliqué. Le bouton était défini sur type = "submit" et un code javascript a été envoyé à ce formulaire lorsque ce bouton a été cliqué. J'ai changé le bouton pour taper = "bouton" et le problème a été résolu.

1
Carlos Ribeiro

Windows a mis en œuvre un accès aux dossiers contrôlés, qui consiste à bloquer les applications non autorisées pour accéder à vos fichiers importants (pratiquement tout ce qui est installé par Windows). Ceci afin d'éviter le cryptage des données et la rançon par les logiciels malveillants.

Windows ouvrira une notification s'il bloque une application.

Vous pouvez autoriser l'accès aux applications/programmes via l'accès aux dossiers contrôlés.

0
user899575