如何在木偶操纵者中传递实验性的铬选项 [英] How to pass experimental chrome options in puppeteer

查看:37
本文介绍了如何在木偶操纵者中传递实验性的铬选项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用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)

我需要将相同的应用程序移植到节点/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实验标志,然后将此配置文件用于木偶人(需要--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下运行,因为无标题模式不能访问无效的URL,如chrome://flag/#enable-nacl,但是用户配置文件应该可以工作。如果不是,则存在与数据目录的相对路径相关的已知铬错误,可使用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那样在Pupeteer中实现。 但在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

这篇关于如何在木偶操纵者中传递实验性的铬选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆