使用 Kameleo 的无头模式的附加镀铬选项

Posted

技术标签:

【中文标题】使用 Kameleo 的无头模式的附加镀铬选项【英文标题】:Additional chrome options for headless mode with Kameleo 【发布时间】:2021-11-25 15:00:51 【问题描述】:

现在一整天都在测试Kameleo.LocalApiClient。注意到一些奇怪的事情。

var client = new KameleoLocalApiClient(new Uri(KameleoBaseUrl));
client.SetRetryPolicy(null);

// Search Chrome Base Profiles
var baseProfileList = await client.SearchBaseProfilesAsync("desktop", "windows", "chrome", "ru-ru");

Random rnd = new Random();
var baseId = rnd.Next(1, baseProfileList.Count);

// Create a new profile with recommended settings
// Choose one of the Firefox BaseProfiles
// You can set your proxy up in the setProxy method
var requestBody = BuilderForCreateProfile
    .ForBaseProfile(baseProfileList[baseId].Id)
    .SetRecommendedDefaults()
    .SetProxy("http", new Server("zproxy.lum-superproxy.io", 22225, "lum-customer-joshua901-zone-zone2", "5inhblkgrzxj"))
    //.SetProxy("http", new Server("zproxy.lum-superproxy.io", 22225, "lum-customer-joshua901-zone-russiashared-ip-181.214.180.215", "lqoz0ee2hbvb"))
    .SetLauncher("chrome")
    //.SetScreen("--window-size", 500, 783)
    .Build();

var profile = await client.CreateProfileAsync(requestBody);

// Start the browser
await client.StartProfileAsync(profile.Id);

// Connect to the running browser instance using WebDriver
var uri = new Uri($"KameleoBaseUrl/webdriver");
var opts = new ChromeOptions();
opts.AddAdditionalOption("kameleo:profileId", profile.Id.ToString());


opts.AddExcludedArgument("enable-automation");
opts.AddArgument("--window-size=500,783");
opts.AddArgument("disable-infobars");
opts.AddArgument("--incongito");
opts.AddArgument("--disable-extensions");

opts.AddArgument("disable-gpu");
opts.AddArgument("headless");
opts.AddArgument("--ignore-certificate-errors");
opts.AddArgument("no-sandbox");
opts.AddArgument("--silent-launch");
opts.AddArgument("--no-startup-window");

//var webdriver = new RemoteWebDriver(uri, opts);
_driver = new RemoteWebDriver(uri, opts)

我想将额外的 ChromeOptions 添加到我的驱动程序中,尤其是能够以“无头”模式运行。

即使我在上面定义了 ChromeOptions 并使用这些选项创建了 RemoteWebDriver,chrome 浏览器仍然会弹出并且不会以无头模式运行。

我如何以及如何添加我的附加选项?

【问题讨论】:

你试过opts.AddArgument("--headless");吗? 是的,我已经尝试了各种可能性。 1 个破折号-headless,2 个破折号--headless,没有破折号headless 您确定可以为远程 Web 驱动程序提供这些参数吗? 【参考方案1】: 浏览器由 Kameleo 启动 RemoteWebDriver 没有启动任何浏览器,只是连接到已经启动的浏览器

因此,您无法使用 RemoteWebDriver 的选项将任何参数传递给浏览器。

有办法提供额外的网络驱动程序选项。当 Kameleo 启动浏览器时,有一个 POST /profiles/guid/start 端点可以处理其他参数、选项和首选项。查看documentation 或查看example code。

await client.StartProfileWithWebDriverSettingsAsync(profile.Id, new WebDriverSettings

    Arguments = new List<string>  "mute-audio" ,
    Preferences = new List<Preference>
    
        new Preference("profile.managed_default_content_settings.images", 2),
        new Preference("profile.password_manager_enabled.images", 2),
    ,
    AdditionalOptions = new List<Preference>
    
        new Preference("pageLoadStrategy", "eager"),
    
);

有些参数不受支持,可能会导致问题,因此最好就这些参数与团队联系。

例如:

opts.AddArgument("--disable-extensions");

无法添加,因为浏览器中需要 Kameleo 的扩展。如果删除它,欺骗将不起作用。

我看到你也想使用这个标志:

opts.AddArgument("disable-gpu");

您可以简单地将 WebGL 设置为 Block。 IT 将导致相同的结果。

目前,无法以无头模式启动浏览器。但很快就会有解决方案。

【讨论】:

知道什么时候会支持无头模式吗?

以上是关于使用 Kameleo 的无头模式的附加镀铬选项的主要内容,如果未能解决你的问题,请参考以下文章

无法运行无头镀铬量角器角 2 窗口

在无头模式下使用 Openoffice“导出”选项而不是“另存为”选项

使用 selenium 在无头模式下运行 Firefox 错误:“选项”对象没有属性“二进制”

Nightwatch测试在Headless chrome模式下找不到元素

在 Selenium 中使用无头选项时出现 TimeoutException

Selenium WebDriver 连接到 Kameleo 浏览器