Подтвердить что ты не робот

Неизвестная ошибка: Chrome не удалось запустить: анонимно вышел

Я получаю эту ошибку, когда запускаю свои тесты с помощью селена с помощью хромированного ребра.

selenium.common.exceptions.WebDriverException: Message: u'unknown error: Chrome failed to start: exited abnormally\n  (Driver info: chromedriver=2.9.248316,platform=Linux 3.8.0-29-generic x86)'

Я загрузил google-chrome stable, а также chromedriver и использовал этот код для запуска браузера.

driver = webdriver.Chrome('/usr/local/bin/chromedriver')

Любые предложения кто-нибудь? Спасибо.

4b9b3361

Ответ 1

Для Linux:

Запустите Дисплей, прежде чем запускать Chrome. для более подробной информации нажмите здесь

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))  
display.start()
driver = webdriver.Chrome()

Ответ 2

Чтобы отладить эту проблему, вы можете использовать аргументы service_log_path и service_args для веб-редактора selenium, чтобы просмотреть выходные данные хромированного ребра:

service_log_path = "{}/chromedriver.log".format(outputdir)
service_args = ['--verbose']
driver = webdriver.Chrome('/path/to/chromedriver',
        service_args=service_args,
        service_log_path=service_log_path)

Я получал это же сообщение об исключении и нашел два способа преодолеть это; Я не уверен, что проблема с OP одинакова, но если нет, то журнал хромированной записи, мы надеемся, поможет. Глядя на мой журнал, я обнаружил, что хронограф (я пробовал 2,9 до 2,6 при попытке решить эту проблему) решает, какой браузер запускается очень неожиданным образом. В каталоге, где находится мой хронограф, есть следующие файлы:

$ ls -l /path/to/
-rwx------  1 pjh grad_cs 5503600 Feb  3 00:07 chromedriver-2.9
drwxr-xr-x  3 pjh grad_cs    4096 Mar 28 15:51 chromium

Когда я вызываю хромированный рекордер с использованием того же кода python, что и OP:

driver = webdriver.Chrome('/path/to/chromedriver-2.9')

Это приводит к сообщению об исключении. В chromedriver.log я нашел это сообщение:

[1.043][INFO]: Launching chrome: /path/to/chromium ...

Невероятно! Хромидра пытается использовать /path/to/chromium (который не является исполняемым файлом, а каталогом, содержащим исходный код) в качестве браузера для выполнения! По-видимому, chromedriver пытается найти текущий каталог для браузера, который будет запущен до поиска моего PATH. Итак, одним из простых решений этой проблемы является проверка каталога, где chromedriver находится для файлов/каталогов, таких как chrome и chromium, и переместить их в другой каталог, чем chromedriver.

Лучшим решением является явное указание селену/хромированию, который браузер выполняет с помощью аргумента chrome_options:

options = webdriver.ChromeOptions()
options.binary_location = '/opt/google/chrome/google-chrome'
service_log_path = "{}/chromedriver.log".format(outputdir)
service_args = ['--verbose']
driver = webdriver.Chrome('/path/to/chromedriver',
        chrome_options=options,
        service_args=service_args,
        service_log_path=service_log_path)

Теперь chromedriver.log показывает:

[0.999][INFO]: Launching chrome: /opt/google/chrome/google-chrome ...

как ожидалось.

Ответ 3

Альтернативное решение использования виртуального дисплея - безголовый режим.

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--window-size=1420,1080')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)

Ответ 4

Если вы используете Linux, убедитесь, что вы не используете его как root. Это то, что дало мне ошибку.

Ответ 5

Я столкнулся с той же проблемой и исправил ее, установив Chrome в:

C:\Users\..\AppData\Local\Google\Chrome\Application

Вы можете сделать это, запустив настройку Chrome и не указывая "Нет" при запросе с помощью элемента управления учетными записями пользователей.

Ответ 7

Я получил ту же ошибку, когда сканировал что-то, используя драйвер scrapy + selenium + chrome на Centos 7 ,, и способ следования URL решил мою проблему.

yum install mesa-libOSMesa-devel gnu-free-sans-fonts

относятся:https://bugs.chromium.org/p/chromium/issues/detail?id=695212

Ответ 8

Еще одно решение для Selen Webdriver - буфер виртуальных кадров X:

with Xvfb() as _:
    timeout_request = ConfigTargetsManager.target_global_configs.get('timeout_request', 10)
    driver = webdriver.Chrome(executable_path=ConfigTargetsManager.target_global_configs.get('chrome_browser_path',
                                                                                             '/usr/lib/chromium-browser/chromedriver'))
    driver.get(url)

Ответ 9

Кто-то уже упомянул об опции --no-sandbox, но для ее расширения: убедитесь, что это первая опция, которую вы передаете:

        System.setProperty("webdriver.chrome.driver",
                Paths.get("setups", driverFolder, driverFile).toAbsolutePath().toString());

        ChromeOptions options = new ChromeOptions();
        Map<String, Object> prefs = new HashMap<>();
        prefs.put("intl.accept_languages", "English");
        options.setExperimentalOption("prefs", prefs);

        options.addArguments("--no-sandbox");
        options.addArguments("--disable-features=VizDisplayCompositor");
        options.addArguments("--incognito");
        options.addArguments("enable-automation");
        options.addArguments("--headless");
        options.addArguments("--window-size=1920,1080");
        options.addArguments("--disable-gpu");
        options.addArguments("--disable-extensions");
        options.addArguments("--dns-prefetch-disable");
        options.setPageLoadStrategy(PageLoadStrategy.NORMAL);

        options.addArguments("enable-features=NetworkServiceInProcess");

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability("marionette", true);
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);

        WebDriver driver = new ChromeDriver(capabilities);
        driver.manage().timeouts().implicitlyWait(15, SECONDS);
        driver.manage().timeouts().pageLoadTimeout(15, SECONDS);

Когда он был добавлен после других параметров, я получил ошибку.