使用 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 的无头模式的附加镀铬选项的主要内容,如果未能解决你的问题,请参考以下文章
在无头模式下使用 Openoffice“导出”选项而不是“另存为”选项
使用 selenium 在无头模式下运行 Firefox 错误:“选项”对象没有属性“二进制”
Nightwatch测试在Headless chrome模式下找不到元素