ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine
Asked Answered
A

8

33

For some reason I get the following error only when I open up a nested webdriver instance. No idea what is happening here.

I am using Windows 10, geckodriver 0.21.0, and Python 3.7.

ConnectionAbortedError: [WinError 10053]

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

Part of Script That Is Working Fine

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

Part of Script Causing System to Abort Connection

            _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

Here it is in a codepen, since it is wayyy too long!

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


Does anybody have any idea whatsoever what might be causing the connection to abort?


Armhole answered 27/7, 2018 at 16:29 Comment(7)
Could you show please what create_webdriver_instance() does?Semivowel
@AndreiSuvorkov of course. i'll add it right nowArmhole
What does the geckodriver.log file say?Osage
@K.Dackow first thing when i wake up tomorrow ill run that part of the script again and post the geckodriver.log and ill send you a msg to notify uArmhole
@K.Dackow ok, ive added the geckodriver.log in a codepen since it puts me way over the character limit. tbh i have no idea what i am or should be looking for in it :/Armhole
I'm not entirely sure either, but usually search for ERROR or EXCEPTION within it to try and diagnose the issue!Osage
@K.Dackow that's what i was thinking. there are numerous errors throughout it, so when i get some time i'm gon have to take a closer lookArmhole
N
15

This error message...

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

...implies that the initialization of a new WebBrowsing Session i.e. Firefox Browser session was aborted.


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

As per your code attempt the error is clearly coming out create_webdriver_instance() function which contains:

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

And:

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

So it is not exactly clear from which function you are facing this issue among return webdriver.Firefox(profile) or webdriver.Firefox().

Perhaps a closer look at the logs within codepen suggests the error is coming out from webdriver.Firefox(profile).


Reasons

There can be multiple reason behind this error:

  • Presence of anti-virus softwares.
  • Firewall blocking the ports.
  • Network Configuration.
  • Problem can be caused by CORS.
  • Due to enabling of HTTP keep-alive connections

Solution

The initial step would be find out if any software is blocking the connection to/from the server in your computer. Apart from that the probable solutions are:

  • Disable anti-virus softwares.
  • Disable firewall.
  • Ensure that /etc/hosts on your system contains the following entry:

    127.0.0.1   localhost.localdomain localhost
    
  • As per Connection was aborted by the software in your host machine you need to allow localhost routes like http://localhost:8080/reactive-commands

  • As per Keep-Alive connection to geckodriver 0.21.0 dropped after 5s of inactivity without re-connection using Selenium Python client

    • AutomatedTester: This issue is not because we are not connected at the time of doing a request. If that was the issue we would be getting a httplib.HTTPConnection exception being thrown. Instead a BadStatusLine is thrown when we do a connection and close it and try parse the response. Now this could be the python stdlib bug, httplib bug or selenium bug. A Python client to replace urllib with something else that does not exhibit the same defect with Keep-Alive connections is WIP.

    • andreastt: The geckodriver team is working on extending the server-side timeout value to something more reasonable. As I said, this would help mitigate this issue but not fundamentally fix it. In any case it is true that five seconds is probably too low to get real benefit from persistent HTTP connections, and that increasing it to something like 60 seconds would have greater performance.


Conclusion

Selenium 3.14.0 has just been released. If you are affected by this issue please upgrade accordingly.


References:

Neman answered 5/8, 2018 at 20:11 Comment(0)
S
9

As documentation says:

Software caused connection abort. An established connection was aborted by the software in your host computer, possibly due to a data transmission time-out or protocol error.

Possible reasons:

  1. Timeout or other network-level error.
  2. Network connection died
  3. Firewall closed the connection because it was open too long
  4. Connection was closed before process has been finished
  5. AntiVirus blocks the connection

and etc.

Also try to downgrade geckodriver 0.21.0 to geckodriver 0.20.1. You can download it here. It seems to be a problem with geckodriver 0.21.0 https://mcmap.net/q/453441/-in-python3-6-selenium-module-connectionabortederror-winerror-10053-an-established-connection-was-aborted-by-the-software-in-your-host-machine

PS:

options.add_argument('-headless')

should be:

options.add_argument('--headless')
Semivowel answered 31/7, 2018 at 6:19 Comment(3)
can you take a look at the geckodriver.log i just posted to the codepen in my question?!?! im not sure what to look for in it??Armhole
Could you please provide a code where you are creating a nested webdriver. Also please describe the process. Are you closing the parent webdriver before child is finished?Semivowel
i already provided the code where i create the "nested" webdriver. _ff is the nested webdriver, and no i'm not closing the parent (ff) before i close _ffArmhole
J
6

This problem happened to me and as the error was intermittent, I initially believed that it was some firewall or antivirus problem, but it was much simpler.

I had a form that was being submitted twice when the SEND button was clicked. The button was set to type="submit" and a javascript code submitted this form when this button was clicked. I changed the button to type="button" and the problem was solved.

Jemie answered 7/7, 2019 at 17:4 Comment(0)
E
3

Another reason: When a page served by python is loading, user may cancel the loading before transmission is complete, by pressing Esc or by clicking 'X'(Stop loading this page button). This is usually done when the server is slow.
E.g. if user navigates to your page and Press Esc before the image is fully loaded, this error will occur. In that case, you have to Handle it.

Elwell answered 24/1, 2020 at 9:25 Comment(0)
K
2

Windows has implemented Controlled folder access, which is to block un-authorized app to access your important files(means almost anything installed by windows). This is to prevent data encryption and ransom by malware.

Windows will pop-out notification if it blocks any app.

You can allow apps/programs access through Controlled folder access.

Kun answered 4/10, 2019 at 11:43 Comment(0)
B
2

I solved this problem with a browser configuration in Firefox: Go to Settings -> general and scroll down to network configuration. in the window that opens I go to the end I selected DNS PROXY USE SOCKS and activated DNS over HTTPS. I chose all three options available.

Bala answered 5/9, 2020 at 0:4 Comment(0)
P
0

Another reason in browser (not webdriver): An extension that doesn't update frequently. In my case this issue was solved when disabling an extension that had some deprecated code. Try on an incognito window for a quick check.

Powerless answered 5/3, 2021 at 11:59 Comment(2)
there were extensions running in your webdriver instance?! didnt even know this was possible o: chrome? firefox?Armhole
No, I'm sorry I didn't clarify. I got this error in the browser's console not in a webdriver.Powerless
B
0

I had the same issue. The issue is happening if the same request is sending multiple times to the server.

This problem happened to me and as the error was intermittent, I initially believed that it was some firewall or antivirus problem, but it was much simpler.

I had a form that was being submitted twice when the SEND button was clicked. The button was set to type="submit" and a javascript code submitted this form when this button was clicked. I changed the button to type="button" and the problem was solved.

Bunt answered 31/5, 2021 at 14:2 Comment(1)
glad to hear thatArmhole

© 2022 - 2024 — McMap. All rights reserved.