Juste pour montrer que j'ai fait tout mon possible, j'ai déjà essayé les réponses suggérées ou au moins les ai relues et essayé de comprendre, pour les questions suivantes:
Bibliothèque Selenium python via docker, l'erreur Chrome n'a pas pu démarrer: sortie anormale
Chrome plante lors de l'utilisation de Selenium (Aucune réponse publiée mais je l'ai toujours regardée)
Comment corriger l'erreur "usr/bin/google-chrome n'est plus en cours d'exécution, donc ChromeDriver suppose que Chrome a planté" l'erreur sous Linux? - Pour celui-ci, j'ai remplacé "/ usr/bin/google-chrome" par "/ etc/alternatives/google-chrome", cela ne fonctionnait toujours pas.
python linux Selenium: chrome non accessible
erreur inconnue: échec du démarrage de Chrome: plantage (sélénium, mode sans tête)
python Selenium: WebDriverException: Message: chrome non joignable
Échec du démarrage du sélénium chrome
L'erreur du pilote Web Selenium Chrome n'a pas pu démarrer
Python: Selenium - Message: erreur inconnue: Chrome n'a pas pu démarrer: s'est arrêté anormalement
J'obtiens une erreur courante que j'ai vue ici sur Stack Overflow, lorsque j'exécute Selenium avec Python sur mon serveur Amazon Linux, j'obtiens les résultats suivants:
Traceback (most recent call last):
File "test-Selenium-chrome.py", line 15, in <module>
driver = webdriver.Chrome(options=options, executable_path='/usr/local/bin/chromedriver') # Optional argument, if not specified will search path.i
File "/usr/local/lib/python3.7/site-packages/Selenium/webdriver/chrome/webdriver.py", line 81, in __init__
desired_capabilities=desired_capabilities)
File "/usr/local/lib/python3.7/site-packages/Selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/usr/local/lib/python3.7/site-packages/Selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python3.7/site-packages/Selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.7/site-packages/Selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
Selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed
(chrome not reachable)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Voici mon code:
#!/usr/bin/python3
import time
from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options
from pyvirtualdisplay import Display
options = Options()
options.binary_location = '/usr/bin/google-chrome'
options.add_argument('--disable-extensions')
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--remote-debugging-port=9515')
options.add_argument('--disable-setuid-sandbox')
display = Display(visible=0, size=(800, 800))
display.start()
driver = webdriver.Chrome(options=options, executable_path='/usr/local/bin/chromedriver') # Optional argument, if not specified will seearch path.i
driver.maximize_window()
driver.get('http://www.google.com/')
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()
J'utilise Google Chrome version 79.0.3945.130 et la version chromedriver correspondante ChromeDriver 79.0.3945.36 comme spécifié dans https://sites.google.com/a/chromium.org/chromedriver/downloads
Informations supplémentaires, si je lance simplement google-chrome à partir de la ligne de commande, j'obtiens:
[ec2-user@ip-xxx-xx-xx-xxx bin]$ pwd
/usr/bin
[ec2-user@ip-xxx-xx-x-xxx bin]$ google-chrome
Segmentation fault
Toute aide est grandement appréciée.
Ce message d'erreur ...
Selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed
(chrome not reachable)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
... implique que ChromeDriver n'a pas pu lancer/générer une nouvelle session Contexte de navigation c'est-à-dire Chrome Browser session.
Selon la discussion dans Selenium: WebDriverException: Chrome n'a pas pu démarrer: s'est écrasé car google-chrome ne fonctionne plus donc ChromeDriver suppose que Chrome s'est écrasé , le l'emplacement par défaut de google-chrome on linux est:
/usr/bin/google-chrome
Remarque : Pour les systèmes Linux, le ChromeDriver attend /usr/bin/google-chrome
pour être un lien symbolique vers le binaire réel Chrome.
Donc, idéalement, le bloc de code minimal suivant aurait dû fonctionner:
from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options
options = Options()
options.binary_location = '/usr/bin/google-chrome'
driver = webdriver.Chrome(options=options, executable_path='/usr/local/bin/chromedriver')
driver.get('http://www.google.com/')
Mais il semble que lorsque vous essayez d'initier une session Chrome manuellement, Erreur de segmentation se produit, c'est-à-dire se bloque comme suit:
[ec2-user@ip-xxx-xx-xx-xxx bin]$ pwd
/usr/bin
[ec2-user@ip-xxx-xx-x-xxx bin]$ google-chrome
Segmentation fault
Erreur de segmentation (raccourci comme segfault
) ou violation d'accès est une condition d'erreur ou de panne soulevée par le matériel avec protection de la mémoire, notifiant à un système d'exploitation que le logiciel a tenté d'accéder à une zone restreinte de Mémoire. Le noyau du système d'exploitation effectuera généralement en réponse une action corrective, transmettant généralement l'erreur au processus incriminé (votre script) en envoyant un signal au processus.
En bref, c'est un mécanisme d'aide pour empêcher les programmes/scripts de corrompre la mémoire qui ne lui appartient pas. En savoir plus ici .
Les raisons potentielles et les solutions sont:
binary_location
propriété./usr/bin/google-chrome
au réel Chrome binaire a été corrompu, vous devrez peut-être créer le lien symbolique./usr/bin/google-chrome
, vous avez donc fourni les droits d'accès.