ConnectionAbortedError: [WinError 10053] 已建立的连接被主机中的软件中止
Posted
技术标签:
【中文标题】ConnectionAbortedError: [WinError 10053] 已建立的连接被主机中的软件中止【英文标题】:ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine 【发布时间】:2019-01-04 19:42:30 【问题描述】:由于某种原因,当我打开嵌套的 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
有人知道是什么原因导致连接中断吗?
【问题讨论】:
你能告诉我create_webdriver_instance()
是做什么的吗?
@AndreiSuvorkov 当然。我马上加进去
geckodriver.log 文件说明了什么?
@K.Dackow 明天我醒来的第一件事就是再次运行该部分脚本并发布 geckodriver.log 并发送一条消息通知你
@K.Dackow 好的,我在代码笔中添加了 geckodriver.log,因为它使我超出了字符限制。 tbh 我不知道我在其中或应该在其中寻找什么:/
【参考方案1】:
正如documentation 所说:
软件导致连接中止。已建立的连接是 被主机中的软件中止,可能是由于数据 传输超时或协议错误。
可能的原因:
-
超时或其他网络级错误。
网络连接中断
防火墙关闭了连接,因为它打开的时间过长
连接在进程完成之前关闭
防病毒软件阻止连接
等等
同时尝试将geckodriver 0.21.0
降级为geckodriver 0.20.1
。你可以下载它here。 geckodriver 0.21.0
https://***.com/a/51236719/8625512好像有问题
PS:
options.add_argument('-headless')
应该是:
options.add_argument('--headless')
【讨论】:
你能看看我刚刚在我的问题中发布到代码笔的geckodriver.log
吗?!?!我不确定要在其中寻找什么??
您能否提供一个代码来创建嵌套的 webdriver。也请描述过程。您是否在孩子完成之前关闭父网络驱动程序?
我已经提供了创建“嵌套”网络驱动程序的代码。 _ff
是嵌套的网络驱动程序,在我关闭 _ff
之前,我不会关闭父级 (ff
)【参考方案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 keep-alive 连接解决方案
第一步将查明是否有任何软件阻止了与您计算机中的服务器的连接。除此之外,可能的解决方案是:
禁用杀毒软件。 禁用防火墙。确保您系统上的 /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 错误。 WIP.
andreastt:geckodriver 团队正在努力将服务器端超时值扩展为更合理的值。正如我所说,这将有助于缓解这个问题,但不能从根本上解决它。在任何情况下,5 秒都可能太短而无法从持久的 HTTP 连接中获得真正的好处,而将其增加到 60 秒左右会有更好的性能。
结论
Selenium 3.14.0
刚刚发布。如果您受到此问题的影响,请相应升级。
参考资料:
Flask broken pipe with requests Cross-Origin Resource Sharing (CORS) Connection was aborted by the software in your host machine [WinError 10053] with the 0.21.0 Keep-Alive connection to geckodriver 0.21.0 dropped after 5s of inactivity without re-connection using Selenium Python client Support keep alive connections Struct hyper::server::Server Urllib3【讨论】:
【参考方案3】:这个问题发生在我身上,由于错误是间歇性的,我最初认为是防火墙或防病毒问题,但它要简单得多。
单击“发送”按钮时,我有一个表单被提交了两次。该按钮被设置为 type="submit",并且当单击此按钮时,一个 javascript 代码提交了此表单。我把按钮改成type="button",问题就解决了。
【讨论】:
【参考方案4】:Windows 已实现受控文件夹访问,即阻止未经授权的应用程序访问您的重要文件(意味着几乎所有由 Windows 安装的文件)。这是为了防止恶意软件对数据进行加密和勒索。
如果它阻止任何应用程序,Windows 将弹出通知。
您可以通过受控文件夹访问来允许应用/程序访问。
【讨论】:
【参考方案5】:另一个原因: 当 python 服务的页面正在加载时,用户可以在传输完成之前取消加载,通过按 Esc 或单击“X”(停止加载此页面按钮)。这通常在服务器速度较慢时完成。 例如,如果用户在图像完全加载之前转到1 并按 Esc,则会发生此错误。在这种情况下,您必须处理它。
【讨论】:
【参考方案6】:我通过 Firefox 中的浏览器配置解决了这个问题:转到 设置 -> 常规 并向下滚动到 网络配置。在打开的窗口中,我选择了 DNS PROXY USE SOCKS 并激活了 DNS over HTTPS。我选择了所有三个可用选项。
【讨论】:
【参考方案7】:浏览器中的另一个原因(不是 webdriver):不经常更新的扩展程序。在我的情况下,当禁用包含一些不推荐使用的代码的扩展时,这个问题得到了解决。尝试使用隐身窗口进行快速检查。
【讨论】:
您的 webdriver 实例中运行了扩展程序?!甚至不知道这是可能的 o: chrome?火狐? 不,很抱歉我没有澄清。我在浏览器的控制台中而不是在网络驱动程序中收到此错误。【参考方案8】:我遇到了同样的问题。如果同一个请求多次发送到服务器,则会出现此问题。
这个问题发生在我身上,由于错误是间歇性的,我最初认为是防火墙或防病毒问题,但它要简单得多。
单击“发送”按钮时,我有一个表单被提交了两次。该按钮被设置为 type="submit",并且当单击此按钮时,一个 javascript 代码提交了此表单。我把按钮改成type="button",问题就解决了。
【讨论】:
很高兴听到这个消息以上是关于ConnectionAbortedError: [WinError 10053] 已建立的连接被主机中的软件中止的主要内容,如果未能解决你的问题,请参考以下文章
ConnectionAbortedError: [WinError 10053] 您的主机中的软件中止了一个已建立的连接