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?
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.
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)
.
Il peut y avoir plusieurs raisons derrière cette erreur:
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:
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
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.
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:
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:
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.0
https://stackoverflow.com/a/51236719/8625512
PS:
options.add_argument('-headless')
devrait être:
options.add_argument('--headless')
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.
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.