Python Selenium и Chromedriver CentOS8

У меня есть сценарий Python, который использует селен и хромированный драйвер. Он отлично работает на моем CentOS8 VPS в течение 3 дней без каких-либо проблем.

Но с сегодняшнего утра скрипт запустился, подождал почти 80 секунд и отобразил это:

[12/Jan/2021 23:04:51] ERROR - Failed : Message: chrome not reachable

Traceback (most recent call last):
  File "script.py", line 55, in <module>
    driver = launch()
  File "script.py", line 37, in launch
    browser = webdriver.Chrome('/usr/bin/chromedriver',chrome_options=chrome_options)
  File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.6/site-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

Никаких модификаций не было, почему сейчас не работает? У меня нет экрана на моем VPS, поэтому я не вижу дополнительной информации.

Вот некоторая информация:

информация о chromedriver:

Nom          : chromedriver
Version      : 87.0.4280.88
Publication  : 1.el8
Architecture : x86_64
Taille       : 27 M
Source       : chromium-87.0.4280.88-1.el8.src.rpm
Dépôt        : @System
Depuis le dé : epel

google-chrome --version:

Google Chrome 87.0.4280.141 

Начало сценария:

from dotenv import load_dotenv
from logger import logger as l
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.chrome.options import Options

import time
import sys
import subprocess

load_dotenv(verbose=True)
dotenv_path = '.env'
load_dotenv(dotenv_path)

def launch():
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')

    browser = webdriver.Chrome('/usr/bin/chromedriver',chrome_options=chrome_options)
    l.info('Started Chrome')
    return browser

person user2178964    schedule 12.01.2021    source источник


Ответы (2)


Проблема решена, но не понимаю как. Я просто перезапускаю свой VPS (перезагружаюсь), и ... он снова работает. Странный

РЕДАКТИРОВАТЬ: Узнайте, почему! Я только что допустил ошибку в конце своего скрипта: b.close (); Но b не существует, имя моей переменной драйвера - driver.

Исключение было обнаружено и не отображено, поэтому я ничего не видел. Но сегодня я запускаю верхнюю команду и вижу, что весь процесс Chrome работает в фоновом режиме.

Вероятно, через несколько дней память была заполнена, и Chrome не запускается. Ошибка была непонятна, но в любом случае это была моя вина.

person user2178964    schedule 13.01.2021

Правило большого пальца

Частая причина сбоя Chrome при запуске - запуск Chrome от имени пользователя root (administrator) в Linux. Хотя эту проблему можно обойти, передав флаг --no-sandbox при создании сеанса WebDriver, такая конфигурация не поддерживается и настоятельно не рекомендуется. Вместо этого вам необходимо настроить среду для запуска Chrome от имени обычного пользователя.


Решение

Удалите следующее chrome_options:

  • --no-sandbox

и выполните свой код от имени пользователя без полномочий root.


Outro

Вот ссылка на Песочницу история.

person DebanjanB    schedule 12.01.2021
comment
Спасибо, но не работает. Я пытаюсь использовать пользователя centos по умолчанию на VPS, который является частью корня группы, и комментирую строку без песочницы в скрипте, но тот же результат, ничего не изменилось ... - person user2178964; 13.01.2021
comment
@ user2178964 попытаться избежать группы root - person DebanjanB; 13.01.2021
comment
Я использую: usermod -g users centos, чтобы сделать моего пользователя CentOS частью группы пользователей, а не корневой группой. Но это ничего не меняет, проблема явно в другом ... - person user2178964; 13.01.2021