gpt4 book ai didi

python - 如何在 puppeteer 中传递实验性 chrome 选项

转载 作者:行者123 更新时间:2023-12-04 04:02:32 27 4
gpt4 key购买 nike

我有一个用 python/selenium 编写的应用程序在 chrome driver 上设置了一些实验选项:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--lang=en')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-browser-side-navigation')
chrome_options.add_argument('--mute-audio')
chrome_options.add_argument('--headless')

chrome_options.add_experimental_option(
'prefs', {
'intl.accept_languages': 'en,en_US',
'download.prompt_for_download': False,
'download.default_directory': '/dev/null',
'automatic_downloads': 2,
'download_restrictions': 3,
'notifications': 2,
'media_stream': 2,
'media_stream_mic': 2,
'media_stream_camera': 2,
'durable_storage': 2,
'plugins': 2,
'popups': 2,
'site_engagement': 2,
'midi_sysex': 2,
'mouselock': 2,
'geolocation': 2,
}
)

driver = webdriver.Chrome(options=chrome_options)
我需要将相同的应用程序移植到 Node/ puppeteer但我不确定如何将实验选项传递给 puppeteer/chromium :
const puppeteer = require('puppeteer');

(async () => {

const options = {
headless: true,
args: [
'--disable-gpu',
'--no-sandbox',
'--lang=en',
'--disable-dev-shm-usage',
'--disable-browser-side-navigation',
'--mute-audio',
],
};

// experimental options ??

const browser = await puppeteer.launch(options);

})();
是否可以将 Chrome 实验选项传递给 puppeteer ?

最佳答案

I.) 通常,您应该能够在 args 中设置任何实验性功能。如果您能够将它们放置在 --flag-switches-begin 之间和 --flag-switches-end标志,并按以下格式提供它们:Pascal 大小写选项名称,由单个逗号分隔,没有空格。
例如。如果你想设置 enable-naclnetwork-service :

--enable-features=EnableNacl,NetworkService
实验功能可以在这里检查: chrome://flags如果它们确实被启用。
Chrome/Chromium 的命令行可以在这里查看: chrome://version查看是否在启动时添加了标志。

II.) 对我来说,这个解决方案没有用(这并不意味着它对你不起作用,值得一试)。所以我使用了一种创建 Chrome 配置文件(实验配置文件 1)的解决方法,我启用了 manually实验标志,然后将此配置文件与 puppeteer 一起使用(需要 --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,查看更多平台和更多信息 here .
注意:您可以在 chrome://version 上检索可执行文件和配置文件路径。页。
注意 2:上面的例子只能用 headless: false 运行因为 headless 模式不能访问像 chrome://flags/#enable-nacl 这样的无效 URL,但用户配置文件应该可以工作。如果不是,则存在与数据目录的相对路径相关的已知 Chrome 错误,可通过 path.resolve 解决。 ,例如:
const path = require('path')
const browser = await puppeteer.launch({ headless: true, args: [`--user-data-dir=${path.resolve(__dirname, 'User Data') }`] })
[source]

编辑
实际上,您要设置的选项仅被 ChromeDriver 称为实验选项|但可在 chrome://policy 处作为 Chrome 政策使用页。确保您设置了未设置值的显示策略以查看它们。
但据我所知,它没有提供简单的解决方案(例如,在 Windows 的情况下,您只能通过注册表进行设置)。在 GitHub 上搜索后,我在 this discussion 中找到了那个 chrome_options.add_experimental_option不像在 ChromeDriver 中那样在 puppeteer 中实现。
但在 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

关于python - 如何在 puppeteer 中传递实验性 chrome 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62863720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com