#
Запуск браузера
Как описано в Как это работает – Основы, чтобы запустить браузер, сначала необходимо найти
бинарные файлы chrome
и chromedriver
, т.к. вы будете их использовать.
Вы можете использовать их для запуска браузера как для автоматического (требуется «chromedriver»), так и для ручного использования. Независимо от того, как вы запускаете его, есть четыре аргумента командной строки, которые вы обычно должны предоставить браузеру.
#
Аргументы командной строки
--user-data-dir
— путь к папке профиля. Будет использоваться браузером для чтения и сохранения профиля. такие данные, как файлы cookie, пароли, история, закладки и т.д.--profile-id
— идентификатор профиля--browser-key
—browserKey
из ответа запроса на старт профиля.--profile-lock
-profileLock
из ответа запроса на старт профиля.
Все параметры совершенно необязательны - если, конечно, вы не хотите использовать отпечаток пальца 😅. Шутки в сторону - это может быть полезно для целей тестирования, например. тестирование аргументов командной строки, отладка дисплея X11 функции или что-то еще, что не связано с запуском профиля.
Однако, чтобы включить подмену отпечатков пальцев, вы должны обязательно указать аргументы --profile-id
и --browser-key
.
Параметр --user-data-dir
должен указывать на папку, созданную на этапе загрузки папки, или любую другую папку, которую вы хотите использовать вместо этого. Если он не указан, будет использоваться профиль Chromium по умолчанию.
Вы можете проверить папку профиля, перейдя на страницу «chrome://version».
Параметр --profile-lock
обязательно рекомендуется использовать, если вы использовали механизм блокировки, поскольку браузер
отправляет ping-запросы на сервер, указывая, что ваш сеанс активен. Если вы использовали блокировку при запуске профиля,
но забыли выставить их при запуске браузера, блокировка сессии станет неактивной через 5 минут, так как не были получены сообщения с пингом браузера
Все параметры необходимо задавать в виде «ключ=значение», так как браузер не распознает другие форматы.
#
Запуск
Если вы разрабатываете какое-то клиентское приложение и вам просто нужно запустить окно браузера без использования Selenium,
вы должны использовать тот же API процесса, который вы использовали бы для загрузки папки с «aemulari».
Вы должны установить аргументы командной строки непосредственно в бинарный файл chrome
.
Но мы предполагаем, что основная причина, по которой вы читаете это руководство, заключается в том, что вы действительно хотите автоматизировать некоторые процессы. Итак, как вы могли видеть в разделе Как это работает – Основы, вы должны создать ChromeOptions и указать для него флаги, с которыми вы хотите запустить Chrome. Обычно это те четыре, которые описаны выше. Затем вы инициализируете объект ChromeDriver с этими параметрами и этого достаточно.
Когда вы запускаете браузер, он делает несколько вещей. Сначала он инициализирует ваш отпечаток пальца. Затем он устанавливает прокси. Если вы используете прокси-сервер SSH, он также включает переадресацию портов, поэтому вы получаете локальную переадресацию прокси-сервера SOCKS на свой компьютер по протоколу SSH. Наконец, если вы используете автоматические функции WebRTC или геолокации, они извлекают данные для этих API.
Любая из этих операций может завершиться неудачей, и если это произойдет, процесс браузера завершится с соответствующим сообщением. Код ошибки и сообщение об ошибке, выведенное в stdout.
Если все пойдет хорошо, откроется окно браузера и вы получите сообщение «Успешно запущено»
в stdout
.
#
Коды ошибок
Вы получите сообщение об ошибке сервера, выведенное в stdout
, если получите коды ошибок 103-122
. Обычно вам
следует обратиться в службу поддержки, если вы получаете коды выхода «1-8», «200» или «255» и не можете исправить это самостоятельно.
Вы также получите сообщение об ошибке вида CURL error: <message>
, выведенное в stdout
в случае кода выхода 2
.
что может помочь вам исправить ошибку самостоятельно. Однако, если вы уверены, что ваш прокси действителен и вы
по-прежнему получаете этот код, обратитесь в службу поддержки, чтобы мы могли разобраться в проблеме.
#
Поведение ChromeDriver
Если все пойдет хорошо, вы откроете окно браузера и сможете управлять им как обычно. Но если при запуске браузера происходит сбой, процесс получения ошибки немного сложнее.
Если вы используете Selenium, вы получите исключение SessionNotCreatedException, вызванное в инициализации ChromeDriver
с сообщением, которое кроме большого количества не очень полезной информации будет содержать
строку вида Surfinite code: <exitcode>
. Проверьте пример кода ниже.
Если вы выбрали трудный путь
Если вы запускаете ChromeDriver самостоятельно и вручную общаетесь с его локальным сервером, то вы должны знать, что
в случае ошибки ваш запрос POST/session получит статус ответа 403 Forbidden и сообщение
которое также содержит строку вида Surfinite code: <exitcode>
.
#
Пример кода
val profileId = "6335f488e21dc11848fd225e"
val useLock = false
// Start the profile
val startProfileResponse = startProfile(
profileId = profileId,
useLock = useLock
)
// Skip downloading folder, just set empty dir
val profileDir = File("profiledirs")
.combineSafe(profileId)
val options = ChromeOptions()
options.addArguments(
listOf(
"--user-data-dir=${profileDir.absolutePath}",
"--profile-id=$profileId",
"--browser-key=${startProfileResponse.browserKey}"
).let { args ->
// if there is a profileLock, add it to chrome arguments
if (startProfileResponse.profileLock != null) {
args + "--profile-lock=${startProfileResponse.profileLock}"
} else {
args
}
}
)
val chromePath = "/home/myuser/.surfinite/browser/chrome"
val chromeDriverPath = "/home/myuser/.surfinite/browser/chromedriver"
// Set Chrome binary path
options.setBinary(chromePath)
// Set Chromedriver binary path
System.setProperty("webdriver.chrome.driver", chromeDriverPath)
val driver = runCatching {
ChromeDriver(options)
}.getOrElse {
if (it is SessionNotCreatedException) {
val message = it.message
if (message != null && message.contains("Surfinite code")) {
val surfiniteCode = message
.substringAfter("Surfinite code: ")
.substringBefore('\n')
println("Got Surfinite error code: $surfiniteCode")
} else {
// Error not related to fingerprint or proxy
it.printStackTrace()
}
} else {
// Some other error
it.printStackTrace()
}
return
}
driver["https://example.com"]
#
Поиск проблем
К сожалению, при использовании ChromeDriver вы не получите никакого вывода в stdout.
Итак, если вы получаете ошибки «1–8» или «255», у вас не будет возможности исправить это самостоятельно.
Чтобы попытаться отладить происходящее и получить аутпут chrome
, вам придется запустить браузер без ChromeDriver, исправить ошибку, а затем вернуться к использованию
ChromeDriver
.
Если вы работаете с прокси или в каких-то условиях у вас часты ошибки и вы хотите видеть вывод из stdout
каждый раз, когда вы запускаете браузер, обратитесь в нашу службу поддержки.
Таких случаев мы еще не видели и над этим не работали. Это все еще возможно, но не в нашей текущей дорожной карте.