使用 `google-chrome --headless` 时如何设置浏览器窗口大小?
Posted
技术标签:
【中文标题】使用 `google-chrome --headless` 时如何设置浏览器窗口大小?【英文标题】:How can I set the browser window size when using `google-chrome --headless`? 【发布时间】:2017-09-18 09:50:25 【问题描述】:我尝试使用 Selenium WebDriver 命令在 Chrome --headless
上设置浏览器大小。
我收到此 WebDriver 错误:
- Failed: unknown error: cannot get automation extension
from unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html
(Session info: headless chrome=58.0.3029.81)
(Driver info: chromedriver=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5),platform=Linux 4.4.0-72-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 10.07 seconds
Build info: version: '3.3.1', revision: '5234b32', time: '2017-03-10 09:04:52 -0800'
System info: host: '826f6a766112', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome=chromedriverVersion=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5), userDataDir=/tmp/.org.chromium.Chromium.cuymDL, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=58.0.3029.81, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=]
Session ID: 9569e5ebd8f7540ce510b20647443baf
【问题讨论】:
您能否提供以下信息: 1. 您使用的是哪个无头浏览器 HtmlUnitDriver 或 PhantomJSDriver ? 2.你能分享你试图访问的网址吗? 3. 你的步骤是什么? 4. 你观察到什么错误? No Phantom,这是真正的 Chrome 浏览器,真正的无头。我找到了答案,见下文。 【参考方案1】:先生。 Leo 的回答很有魅力。我已经用 6000x6000 的窗口大小对此进行了测试。
在c#中也是这样
var options = new ChromeOptions();
options.AddArgument("no-sandbox");
options.AddArgument("headless");
options.addArguments("window-size=1920,1080");
IWebDriver _driver= new ChromeDriver($@"path to chrome web driver folder", options, TimeSpan.FromSeconds(130));
【讨论】:
【参考方案2】:在 Jenkins 上运行时,我遇到了屏幕分辨率问题(强制无头模式)。解决方案非常简单:将无头模式显式设置为true
。出于某种原因,不明确地这样做会导致我的屏幕“缩小”,从而导致各种“元素拦截点击”问题。因为我在失败时截屏,所以我注意到分辨率(大小)不对。一旦我这样做了,问题就消失了;由故障期间截取的屏幕截图确认。
为避免与本地配置冲突,我将此标志的值移动到配置文件中,然后将其添加到我们的.gitignore
文件中以防止意外覆盖。
如果您像我一样,这些常见的解决方案都没有奏效,请确保您明确设置此值:
ChromeOptions options = new ChromeOptions();
...
String headlessMode = readProperty("headless_mode"); // Get value from some prop file (my own implementation)
options.setHeadless(Boolean.valueOf(headlessMode));
...
driver = new ChromeDriver(options);
如果您不想(或不需要)这种分离,只需在setHeadless
方法调用中将值设置为true
。
【讨论】:
【参考方案3】:使用内置的 Selenium 函数:
aDriver.manage().window().setSize(new Dimension(width, height));
它就像一个冠军。我已经将它用于 Firefox、Chrome(甚至无头)和 Edge。
【讨论】:
python+splinter: browser.driver.set_window_size(width, height) 它不能在无头模式下工作。 Leo 先生的回答很有魅力。在 c# 中相同 var options = new ChromeOptions(); options.AddArgument("无沙盒"); options.AddArgument("headless"); options.addArguments("窗口大小=1920,1080"); IWebDriver _driver= new ChromeDriver($@"chrome web driver 文件夹的路径", options, TimeSpan.FromSeconds(130));【参考方案4】:我找到了。只需将--window-size
命令行argument 传递给Google Chrome,例如--window-size=1920,1080
。
在Protractor 配置中,如下所示:
capabilities:
browserName: 'chrome',
chromeOptions:
args: ['headless', 'window-size=1920,1080']
很酷的是窗口大小不限于当前显示。它是真正无头的,这意味着它可以根据测试的需要而变大。
Java 代码:
options.addArguments("window-size=1920,1080");
我在 Headless protractor not sharding tests 中对此进行了更多扩展。
【讨论】:
对于使用 java 版本的用户,请使用:options.addArguments("window-size=1920x1080");而不是:options.addArguments("window-size","1920x1080"); 这对我在 MacOS 上不起作用,但window-size=1920,1080
起作用(注意逗号)。链接的文档也反映了这一点。
谢谢杰米!固定!!
如果你只想设置宽度怎么办?例如,我需要“完整站点,浏览器宽度为 1200 像素”。以上是关于使用 `google-chrome --headless` 时如何设置浏览器窗口大小?的主要内容,如果未能解决你的问题,请参考以下文章
使用 `google-chrome --headless` 时如何设置浏览器窗口大小?
使用 google-chrome cli 选项打开多个 PWA