ConnectionAbortedError:[WinError 10053]主机中的软件中止了已建立的连接 [英] ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine
问题描述
由于某种原因,当我打开一个嵌套的webdriver
实例时,只会得到以下错误 .不知道这里发生了什么.
For some reason I get the following error only when I open up a nested webdriver
instance. No idea what is happening here.
我正在使用 Windows 10, geckodriver 0.21.0,和 Python 3.7.
ConnectionAbortedError:[WinError 10053]
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
这里是 codepen ,因为它太长了!
Here it is in a codepen, since it is wayyy too long!
create_webdriver_instance函数
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?
推荐答案
此错误消息...
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine
...表示新的 Web浏览会话(即 Firefox浏览器会话)的初始化已中止.
...implies that the initialization of a new WebBrowsing Session i.e. Firefox Browser session was aborted.
根据您的代码尝试,错误显然是来自create_webdriver_instance()
函数,其中包含:
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)
并且:
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()
中,您从哪个功能面临的问题尚不完全清楚.
So it is not exactly clear from which function you are facing this issue among return webdriver.Firefox(profile)
or webdriver.Firefox()
.
也许仔细看看 codepen 表示错误是从 webdriver.Firefox(profile)
发出的.
Perhaps a closer look at the logs within codepen suggests the error is coming out from webdriver.Firefox(profile)
.
此错误背后可能有多种原因:
There can be multiple reason behind this error:
- 存在防病毒软件.
- 防火墙阻止了端口.
- 网络配置.
- 问题可能由 CORS 引起. >
- 由于启用了HTTP保持活动连接
- 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
第一步是确定是否有任何软件阻止与您计算机中服务器的连接.除此之外,可能的解决方案是:
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:
- 禁用防病毒软件.
- 禁用防火墙.
-
确保系统上的/etc/hosts包含以下条目:
- Disable anti-virus softwares.
- Disable firewall.
Ensure that /etc/hosts on your system contains the following entry:
127.0.0.1 localhost.localdomain localhost
根据您的主机中的软件中止连接您需要允许http://localhost:8080/reactive-commands
As per Connection was aborted by the software in your host machine you need to allow localhost routes like http://localhost:8080/reactive-commands
根据与geckodriver 0.21.0的保持活动连接在5秒钟不活动后被删除使用Selenium Python客户端重新连接
AutomatedTester :此问题不是因为在进行请求时我们尚未连接.如果这是问题所在,我们将收到一个抛出的httplib.HTTPConnection异常.相反,当我们进行连接并关闭并尝试解析响应时,会抛出BadStatusLine.现在,这可能是python stdlib错误,httplib错误或selenium错误.将urllib替换为与Keep-Alive连接没有相同缺陷的其他Python客户端是 WIP .
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 :geckodriver团队正在努力将服务器端超时值扩展到更合理的值.正如我所说,这将有助于缓解此问题,但不能从根本上解决它.无论如何,五秒钟可能太短而无法从持久的HTTP连接中获得真正的好处,将其增加到60秒左右将具有更高的性能.
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.
Selenium 3.14.0
刚刚发布.如果您受到此问题的影响,请相应升级.
Selenium 3.14.0
has just been released. If you are affected by this issue please upgrade accordingly.
参考文献:
- 带有请求的烧瓶破损管道
- 跨域资源共享(CORS)
- 连接已被主机中的软件中止
- 带有0.21.0的[WinError 10053]
- 到geckodriver 0.21.0的保持活动连接在闲置5s后没有使用Selenium重新连接Python客户端
- 支持保持活动连接
- 结构化hyper :: server :: Server
- Urllib3
- 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
这篇关于ConnectionAbortedError:[WinError 10053]主机中的软件中止了已建立的连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!