I.) Обычно вы должны иметь возможность установить любые экспериментальные функции среди args
, если вы можете разместить их между флагами --flag-switches-begin
и --flag-switches-end
и указать их в следующем формате: Pascal имена опций регистра, разделенные одной запятой без пробела. Например, если вы хотите установить enable-nacl
и network-service
:
--enable-features=EnableNacl,NetworkService
Здесь можно проверить экспериментальные возможности: chrome: // флаги , если они действительно включены.
Командная строка Chrome / Chromium может быть проверена здесь: chrome: / / version , чтобы увидеть, добавляются ли флаги при запуске.
II.) Для меня это решение не сработало (это не значит, что оно не сработает для вас, стоит попробовать). Поэтому я использую обходной путь создания профиля Chrome (экспериментальный профиль 1), где я включаю вручную экспериментальные флаги, а затем использую этот профиль с кукловодом (требуются --user-data-dir=
и --profile-directory=
):
const puppeteer = require('puppeteer')
async function fn() {
const browser = await puppeteer.launch({
headless: false,
args: [
// '--enable-features=EnableNacl,NetworkService',
'--user-data-dir=C:\\Users\\user.name\\AppData\\Local\\Chromium\\User Data',
'--profile-directory=Experimental Profile 1'
]
})
const page = await browser.newPage()
await page.goto('chrome://flags/#enable-nacl')
}
fn()
Пример выше для Windows, см. Другие платформы и дополнительную информацию здесь .
Примечание: Вы можете получить исполняемый файл и пути к профилям на странице chrome: // версия .
Примечание 2: Приведенный выше пример может быть запущен только с headless: false
, поскольку безголовый режим не может посещать недопустимые URL-адреса, например chrome: // flags / # enable-nacl , но профиль пользователя должен работать. Если это не так, то существует известная ошибка хрома, связанная с относительным путем к каталогу данных, которая решается с помощью path.resolve
, например:
const path = require('path')
const browser = await puppeteer.launch({ headless: true, args: [`--user-data-dir=${path.resolve(__dirname, 'User Data') }`] })
[источник]
Изменить
На самом деле параметры, которые вы хотите установить, называются только экспериментальные параметры ChromeDriver , но доступны как chrome политики по адресу chrome : // policy page. Убедитесь, что вы установили Показать политики без установленного значения , чтобы их увидеть.
Но, насколько я понимаю, это не обеспечивает простого решения (например, в случае Windows вы можете установить его только через реестр). После поиска на GitHub я обнаружил в этом обсуждении , что chrome_options.add_experimental_option
не реализован в кукольнике, как в ChromeDriver. Но в puppeteer-extra для этого есть специальный плагин, который называется: user-preferences .
Например:
const puppeteer = require('puppeteer-extra')
puppeteer.use(require('puppeteer-extra-plugin-user-preferences')({ userPrefs: {
download: {
prompt_for_download: false
}
}}))
const browser = await puppeteer.launch()
Ссылка на имена префиксов и их доступ: https://chromium.googlesource.com/chromium/src/+/master/chrome/common/pref_names.cc