С ошибкой «Error Code: STATUS_ACCESS_VIOLATION» может столкнуться любой владелец Chromium-браузера: Edge, Opera, Google Chrome и т.п. Технически она обозначает, что браузер или отдельное его расширение пытается обратиться к области памяти, которая не существует или к которой у приложения нет достаточных прав доступа.
Не менее часто с такой ошибкой сталкиваются владельцы скриптов парсинга, в которых задействованы headless-браузеры и библиотеки web-драйверов, такие как Puppeteer, Selenium, Playwright и т.п.
Ниже разбираем все причины ошибки, а также варианты обхода и решения проблемы.
Иногда ошибка «status_access_violation» выводится с кодом 0xc0000005, а иногда с формулировкой «Aw, Snap! STATUS_ACCESS_VIOLATION». Наиболее вероятные причины:
Каждый вариант проблемы будет требовать своих методов реагирования и отдельных технических решений.
Будем излагать методы решения ошибки «Status access violation» в соответствии с простотой их реализации.
Выделите ярлык, через который вы запускаете свой браузер. И через меню правой кнопки выберите пункт «Свойства». В поле «Объект» допишите флаг --no-sandbox. Запустите браузер.
Если ярлыка нет, например, если браузер закреплён у вас в панели задач, то можно создать его заново. Перейдите в каталог с браузером, найдите основной исполняемый файл (browser.exe) и через меню правой кнопки мыши вынесите его на рабочий стол:
Теперь в ярлыке можно дописывать свой флаг.
Использовать браузер с постоянно выключенной «песочницей» разработчики не рекомендуют. Но если вы работаете с парсером, это первое средство оптимизации ОЗУ! 😉
Пример запуска экземпляра браузера через веб-драйвер Selenium:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Создаём объект опций
options = Options()
# Добавляем флаг отключения песочницы
options.add_argument("--no-sandbox")
Аппаратное ускорение заставляет браузер использовать видеокарту (GPU), вместо того чтобы всё «рисовать» через центральный процессор. На старых ПК конфликты с памятью GPU могут возникать достаточно часто.
Отключается ускорение либо на уровне всего браузера, либо на уровне утилиты настройки GPU.
Через стандартные настройки — самый простой вариант:
Если браузер вообще не запускается или сразу вылетает, то запустите его с флагом принудительного отключения ускорения через ярлык:
Вариант для веб-драйверов при парсинге в headless-режиме — для Puppeteer (Node.js), для разнообразия:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
args: [
'--disable-gpu',
'--no-sandbox' // на всякий случай и песочницу отключаем тоже
]
});
const page = await browser.newPage();
// ...
})();
Флаг --disable-gpu в современных версиях Chrome не всегда отключает ускорение на 100%. Поэтому многие разработчики парсеров для гарантии также добавляют флаги:
Если проблема в конкретном расширении, то достаточно сначала отключить их все, а затем включать поочерёдно и проверять на наличие ошибки.
Для отключения расширений:
Если браузер не запускается вообще, можно попробовать удалить расширения вручную. Они лежат в каталоге вашего пользователя:
C:\Users\USER_NAME\AppData\Local\Google\Chrome\User Data\Default\Extensions
Сброс настроек на уровне профиля может помочь, если не сработало отключение расширений.
Не все Chromium-браузеры поддерживают механизм создания нескольких профилей. Если в вашем браузере его нет, то можно вручную удалить все данные пользователя (можно предварительно их скопировать, чтобы потом можно было быстро всё восстановить), обычно они хранятся по пути:
C:\Users\[Ваше_Имя_Пользователя]\AppData\Local\Google\Chrome\User Data
Идеальные прокси для доступа к ценным данным со всего мира.
Тут всё будет зависеть от того, что конкретно вы используете:
На этом простые варианты заканчиваются и начинаются более сложные, а также требующие заметно больше времени и усилий.
Желательно без расширений и синхронизации. Важно, чтобы браузер был «девственно чист» для достоверности эксперимента. Если ошибка повторяется, то проблема либо в самом браузере, либо на аппаратном уровне/уровне ОС.
Чтобы гарантированно исключить браузер — попробуйте разные версии, из разных веток релизов и разных сборок (более ранние / поздние и т.п.).
Напомним, ошибка status access violation может возникать в том числе и из-за конфликта драйверов.
Убедитесь, что у вас установлена последняя стабильная версия драйвера для видеокарты — встроенной и дискретной.
Не стоит ставить максимально свежие драйвера и драйвера из непроверенных источников.
Если официальный драйвер производителя «сбоит», попробуйте откатить его до версии из официального каталога Microsoft — он устанавливается автоматически или вручную через центр обновлений / менеджер устройств. В центре обновлений ищите раздел необязательных обновлений.
В некоторых особо тяжёлых случаях может потребоваться запуск ОС в безопасном режиме и удаление драйверов через специальные утилиты, такие как Display Driver Uninstaller (DDU).
Если у вас устройство с несколькими видеокартами, убедитесь, что браузер запускается во встроенной. За переключение рендеринга может отвечать утилита настройки GPU, например, «Панель управления Nvidia»:
Если ОЗУ неисправно, то ошибка «status_access_violation» будет возникать хаотично — при попадании данных в сбойный сектор или при сильном заполнении ОЗУ.
У Windows есть встроенное средство диагностики:
Утилита предложит два варианта: выполнить проверку сразу (компьютер перезагрузится сам) или при следующем включении (вы сами выберете, когда его нужно перезагрузить).
Вместо штатной утилиты можно воспользоваться сторонними программами, желательно на загрузочных дисках. Самое популярное бесплатное решение — MemTest86.
Утилиту можно найти в Linux-сборках или в специальных ISO-образах для восстановления систем, например, SystemRescue.
«Тяжёлая артиллерия» — если не помогло ничего из описанного выше. Полная переустановка связана с потерей пользовательских данных и затратами времени на установку всех ваших прикладных программ с нуля. А это не один час времени, даже при условии, что все необходимые инсталляционные пакеты у вас будут под рукой.
Щадящий вариант — проверить все системные файлы Windows. Для этого используйте команды:
С недавних пор Google Chrome отказался от ручной настройки прокси, поэтому прокси теперь можно либо подключить на уровне всей операционной системы (через специальные программы), либо через профильные расширения в браузере.
И те, и те работают на низком уровне, чтобы перехватить и перенаправить трафик. Из-за этого некоторые решения могут конфликтовать с рендером Chrome, соответственно — вызывать нарушение доступа к памяти с ошибкой STATUS_ACCESS_VIOLATION.
А если вы пишете свой парсер, использующий headless-Chrome, то вероятность такой ошибки возрастает кратно — ни один масштабный сбор данных невозможен без прокси.
Варианты решений ошибки STATUS_ACCESS_VIOLATION при работе через прокси аналогичны тому, что было изложено выше:
Обязательно используйте качественные прокси, такие как Froxy. У нас ротация выполняется на стороне сервиса, логику вы настраиваете через панель управления для каждого отдельно взятого порта. Соответственно, никаких дополнительных программ для ротации использовать не нужно. Достаточно только перенаправить трафик браузера через прокси. Для этого подойдут даже простейшие прокси-расширения или библиотеки, рассчитанные на web-драйверы:
В Playwright можно воспользоваться штатным sync_api — через вызов sync_playwright или async_playwright.
Ошибка «Error Code: STATUS_ACCESS_VIOLATION» возникает по разным причинам, но чаще всего виноваты браузерные расширения или встроенная «песочница» Хрома. Если вы занимаетесь парсингом, то проблему можно решить использованием специальных флагов и параметров запуска для всех экземпляров headless-Chrome. Как, что и куда добавлять — показали выше. Самые сложные случаи могут потребовать полной переустановки браузера, операционной системы или даже замены модулей памяти / видеокарт.