web-dev-qa-db-fra.com

erreur inconnue: la session a été supprimée en raison d'un crash de page à partir d'une erreur inconnue: impossible de déterminer l'état de chargement à partir de l'onglet s'est écrasé avec ChromeDriver Selenium

J'utilise InstaPy qui utilise Python et Selenium. Je démarre le script par Cron et de temps en temps il plante. Donc, c'est vraiment irrégulier, parfois il fonctionne bien. I'v également posté sur GitHub Repo mais je n'ai pas eu de réponse là-bas, donc je demande ici maintenant si quelqu'un a une idée de pourquoi.

C'est un serveur ubuntu de Digital Ocean et je l'utilise en mode sans tête. La version du pilote est visible sur le journal. voici les messages d'erreur:

ERROR [2018-12-10 09:53:54] [user]  Error occurred while deleting cookies from web browser!
b'Message: invalid session id\n  (Driver info: chromedriver=2.44.609551 (5d576e9a44fe4c5b6a07e568f1ebc753f1214634),platform=Linux 4.15.0-42-generic x86_64)\n'
Traceback (most recent call last):
  File "/root/InstaPy/instapy/util.py", line 1410, in smart_run
    yield
  File "./my_config.py", line 43, in <module>
    session.follow_user_followers(['xxxx','xxxx','xxxx','xxxx'], amount=100, randomize=True, interact=True)
  File "/root/InstaPy/instapy/instapy.py", line 2907, in follow_user_followers
    self.logfolder)
  File "/root/InstaPy/instapy/unfollow_util.py", line 883, in get_given_user_followers
    channel, jumps, logger, logfolder)
  File "/root/InstaPy/instapy/unfollow_util.py", line 722, in get_users_through_dialog
    person_list = dialog_username_extractor(buttons)
  File "/root/InstaPy/instapy/unfollow_util.py", line 747, in dialog_username_extractor
    person_list.append(person.find_element_by_xpath("../../../*")
  File "/usr/local/lib/python3.6/dist-packages/Selenium/webdriver/remote/webelement.py", line 351, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "/usr/local/lib/python3.6/dist-packages/Selenium/webdriver/remote/webelement.py", line 659, in find_element
    {"using": by, "value": value})['value']
  File "/usr/local/lib/python3.6/dist-packages/Selenium/webdriver/remote/webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "/usr/local/lib/python3.6/dist-packages/Selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.6/dist-packages/Selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
Selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed
  (Session info: headless chrome=70.0.3538.110)
  (Driver info: chromedriver=2.44.609551 (5d576e9a44fe4c5b6a07e568f1ebc753f1214634),platform=Linux 4.15.0-42-generic x86_64)

During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
  File "/root/InstaPy/instapy/instapy.py", line 3845, in end
    self.browser.delete_all_cookies()
  File "/usr/local/lib/python3.6/dist-packages/Selenium/webdriver/remote/webdriver.py", line 878, in delete_all_cookies
    self.execute(Command.DELETE_ALL_COOKIES)
  File "/usr/local/lib/python3.6/dist-packages/Selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.6/dist-packages/Selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
Selenium.common.exceptions.WebDriverException: Message: chrome not reachable
  (Session info: headless chrome=71.0.3578.80)
  (Driver info: chromedriver=2.44.609551 (5d576e9a44fe4c5b6a07e568f1ebc753f1214634),platform=Linux 4.15.0-42-generic x86_64)

Une idée de la raison et comment la résoudre?

18
mastercheef85

Bien que vous voyez l'erreur comme:

Error occurred while deleting cookies from web browser!
b'Message: invalid session id\n  (Driver info: chromedriver=2.44.609551 (5d576e9a44fe4c5b6a07e568f1ebc753f1214634),platform=Linux 4.15.0-42-generic x86_64)\n'

La principale exception est:

Selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed

Vos essais de code nous auraient donné des indices sur ce qui ne va pas.


Solution

Il existe différentes solutions à ce problème. Cependant, selon nknownError: session supprimée en raison du crash de la page de l'onglet planté ce problème peut être résolu par l'une des solutions suivantes:

  • Ajoutez ce qui suit chrome_options:

    chrome_options.add_argument('--no-sandbox')         
    
  • Chrome semble planter dans les conteneurs Docker sur certaines pages en raison d'un trop petit /dev/shm. Vous devrez donc peut-être corriger le petit /dev/shm Taille.

  • Un exemple:

    Sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm
    
  • Cela fonctionne également si vous utilisez -v /dev/shm:/dev/shm option de partage Hôte/dev/shm

  • Une autre façon de le faire fonctionner serait d'ajouter le chrome_options as --disable-dev-shm-usage. Cela forcera Chrome à utiliser le /tmp répertoire à la place. Cela peut cependant ralentir l'exécution car le disque sera utilisé à la place de la mémoire.

    chrome_options.add_argument('--disable-dev-shm-usage')        
    

de l'onglet s'est écrasé

de l'onglet s'est écrasé était WIP ( Work In Progress) avec le Chromium Team depuis un certain temps maintenant qui concerne Linux essayant de toujours utiliser/dev/shm pour la mémoire non exécutable. Voici les références:


Référence

Vous pouvez trouver quelques discussions pertinentes dans:

37
DebanjanB