ConnectionAbortedError:[WinError 10053]主机中的软件终止了已建立的连接

时间:2018-07-27 16:29:25

标签: python python-3.x selenium selenium-webdriver geckodriver

由于某种原因,当我打开嵌套的webdriver实例时,只会得到以下错误 。不知道这里发生了什么。

我正在使用 Windows 10, geckodriver 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,中,因为它太长了!

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


是否有人知道什么可能导致连接中断?


8 个答案:

答案 0 :(得分:2)

documentation说:

  

软件导致连接中止。建立的连接是   可能是由于数据导致主机计算机软件中止   传输超时或协议错误。

可能的原因:

  1. 超时或其他网络级错误。
  2. 网络连接中断
  3. 防火墙由于打开时间太长而关闭了连接
  4. 在过程完成之前关闭连接
  5. AntiVirus阻止连接

还尝试将geckodriver 0.21.0降级为geckodriver 0.20.1。您可以here下载它。 geckodriver 0.21.0 https://stackoverflow.com/a/51236719/8625512

似乎有问题

PS:

options.add_argument('-headless')

应为:

options.add_argument('--headless')

答案 1 :(得分:2)

此错误消息...

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

...表示新的 WebBrowsing会话 Firefox浏览器会话的初始化已中止。


已建立的连接被主机中的软件中止了

按照您的代码尝试,错误显然来自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保持活动连接

解决方案

第一步是确定是否有任何软件阻止与计算机中服务器的连接。除此之外,可能的解决方案是:

  • 禁用防病毒软件
  • 禁用防火墙
  • 确保系统上的/ etc / hosts包含以下条目:

    127.0.0.1   localhost.localdomain localhost
    
  • 根据Connection was aborted by the software in your host machine,您需要允许http://localhost:8080/reactive-commands

  • 之类的本地主机路由
  • 根据Keep-Alive connection to geckodriver 0.21.0 dropped after 5s of inactivity without re-connection using Selenium Python client

    •   

      AutomatedTester :此问题不是因为在进行请求时我们尚未连接。如果是这个问题,我们将收到一个抛出的httplib.HTTPConnection异常。相反,当我们进行连接并关闭并尝试解析响应时,将引发BadStatusLine。现在这可能是python stdlib错误,httplib错误或selenium错误。将urllib替换为与Keep-Alive连接没有相同缺陷的其他Python客户端是 WIP

    •   

      andreastt :geckodriver团队正在努力将服务器端超时值扩展到更合理的值。正如我所说,这将有助于缓解此问题,但不能从根本上解决它。无论如何,五秒钟可能太短而无法从持久HTTP连接中获得真正的好处,将其增加到60秒左右将具有更高的性能。


结论

Selenium 3.14.0 刚刚发布。如果您受到此问题的影响,请相应升级。


参考文献:

答案 2 :(得分:2)

另一个原因: 当python服务的页面正在加载时,用户可以在传输完成之前通过按 Esc 或单击'X'来取消加载(停止加载此页面按钮)。通常在服务器速度缓慢时执行此操作。 例如,如果用户转到1并在图像完全加载之前按Esc键,则会发生此错误。在这种情况下,您必须处理

答案 3 :(得分:2)

我使用Firefox中的浏览器配置解决了此问题:转到设置-> 常规,然后向下滚动至网络配置。在打开的窗口中,我选择了 DNS代理使用套接字,并激活了基于HTTPS的DNS 。我选择了所有三个选项。

答案 4 :(得分:1)

这个问题发生在我身上,并且由于错误是间歇性的,我最初认为这是一些防火墙或防病毒问题,但是要简单得多。

单击“发送”按钮时,我有一个提交两次的表单。该按钮被设置为type =“ submit”,并且单击此按钮时,JavaScript代码提交了此表单。我将按钮更改为type =“ button”,问题解决了。

答案 5 :(得分:1)

我遇到了同样的问题。如果同一个请求多次发送到服务器,就会出现问题。

这个问题发生在我身上,由于错误是间歇性的,我最初认为这是一些防火墙或防病毒问题,但它要简单得多。

当单击“发送”按钮时,我有一个表单被提交了两次。该按钮被设置为 type="submit" 并且当单击该按钮时一个 javascript 代码提交了这个表单。我把按钮改成type="button",问题就解决了。

答案 6 :(得分:0)

Windows已实现“受控文件夹”访问,这是为了阻止未经授权的应用程序访问您的重要文件(几乎意味着Windows安装的所有文件)。这是为了防止数据被恶意软件加密和勒索。

如果Windows阻止了任何应用程序,则会弹出通知。

您可以允许应用程序/程序通过受控文件夹访问。

答案 7 :(得分:0)

浏览器中的另一个原因(不是网络驱动程序):扩展程序不经常更新。在我的情况下,禁用具有一些弃用代码的扩展时,此问题已解决。尝试使用隐身窗口进行快速检查。