如何控制 ChromeDriver 打开的窗口大小?

我使用 Selenium WebDriver 实现自动化,我使用的是 铬合金驱动器

我已经注意到,当我的驱动程序运行并打开 Chrome 浏览器时,它会打开一个奇怪大小的浏览器。 我试图修好它,但是徒劳无功。

有人知道我该怎么改吗?

150252 次浏览

尝试使用 driver.manage.window.maximize();最大化窗口。

试试这个

using System.Drawing;
driver.Manage().Window.Size = new Size(width, height);

使用这个来设置你自定义的尺寸:

driver.manage().window().setSize(new Dimension(1024,768));

你可以根据你的要求改变尺寸。

如果你正在使用 Facebook 的 php 语言绑定,试试这个:

$driver->manage()->window()->setSize(new WebDriverDimension(1024,768));
#use chrome webdriver


driver = webdriver.Chrome('path to /chromedriver')
driver.set_window_size(1400,1000)

在 java/groovy 中尝试:

import java.awt.Toolkit;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;


...


java.awt.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();


Dimension maximizedScreenSize = new Dimension((int) screenSize.getWidth(), (int) screenSize.getHeight());
driver.manage().window().setPosition(new Point(0, 0));
driver.manage().window().setSize(maximizedScreenSize);

这将全屏打开浏览器

如果您正在使用 Clojure 和 https://github.com/semperos/clj-webdriver,您可以使用此代码片段来调整浏览器的大小。

(require '[clj-webdriver.taxi :as taxi])


; Open browser
(taxi/set-driver! {:browser :chrome} "about:blank")


; Resize browser
(-> taxi/*driver* (.webdriver) (.manage) (.window)
(.setSize (org.openqa.selenium.Dimension. 0 0)))

使用 Dimension Class控制窗口大小。

Dimension d = new Dimension(1200,800);  //(x,y coordinators in pixels)
driver.manage().window().setSize(d);

巨蟒

司机

chrome = 57.0.2987.133
chromedriver = 2.27.440174

密码:

from selenium.webdriver.chrome.options import Options


chrome_options = Options()
chrome_options.add_argument("--window-size=1920,1080")
driver = Chrome(chrome_options=chrome_options)

Ruby 版本:

caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"args"=> ["--window-size=1280,960"]})


url = "http://localhost:9515"  # if you are using local chrome or url = Browserstack/ saucelabs hub url if you are using cloud service providers.


Selenium::WebDriver.for(:remote, :url => url, :desired_capabilities => caps)

调整大小铬在最新的铬驱动程序是错误的,它失败与这个故障消息间歇。

                        unknown error: cannot get automation extension
from timeout: cannot determine loading status
from timeout: Timed out receiving message from renderer: -65.294
(Session info: chrome=56.0.2924.76)
(Driver info: chromedriver=2.28.455517 (2c6d2707d8ea850c862f04ac066724273981e88f)

而且通过 javascript 的 resizeTo 也不支持通过 selenium webDriver 启动的 chrome。因此,最后一个选项是使用命令行开关。

C # 版本的@yonatan-kiron 的答案,以及来自示例代码的 Selenium 的 using语句。

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--window-size=1300,1000");


using (IWebDriver driver = new ChromeDriver(chromeOptions))
{
...
}

下面的铬选项为我工作的无头铬:

在爪哇:

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--window-size=1920,1080");
chromeOptions.setHeadless(true);
driver = new ChromeDriver(chromeOptions);
driver.get("your-site");
driver.manage().window().maximize();

Selenium-java: 3.8.1

色差驱动器: 2.43

Chrome: v69-71

RUBY


1号进场

options = {
'chromeOptions' => {
'args' => ['start-fullscreen']
}
}


caps = Selenium::WebDriver::Remote::Capabilities.chrome(options)
@driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps

2号进场

options = {
'chromeOptions' => {
'args' => ['window-size=640,480']
}
}


caps = Selenium::WebDriver::Remote::Capabilities.chrome(options)
@driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps

3号入口

max_width, max_height = @driver.execute_script("return [window.screen.availWidth, window.screen.availHeight];")
@driver.manage.window.resize_to(max_width, max_height)

4号入口

@driver.manage.window.maximize

5号进场

target_size = Selenium::WebDriver::Dimension.new(1600, 1268)
@driver.manage.window.size = target_size

6号进场

@driver.manage.window.resize_to(640, 480)

7号进场

@driver.execute_script("window.resizeTo(640, 480);")

只要你使用的总屏幕分辨率大于你想要使用的窗口大小,你就可以使用这个(C #) :

browserDriver.Manage().Window.Size = windowSize;

如果你的屏幕分辨率比较小,那么你就不走运了。我尝试了不同的方法,比如:

chromeOptions.AddArgument($"window-size={windowSize.Width},{windowSize.Height}");

或者甚至导入移动窗口函数来调整窗口大小:

[DllImport("user32.dll", SetLastError = true)]
static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int Width, int Height, bool Repaint);


// Example
MoveWindow(process.MainWindowHandle, 0, 0, windowSize.Width, windowSize.Height, true);

但这些都不管用。这似乎是铬做了一些不同的事情,以防止窗口大小增长超过屏幕分辨率。对于 Firefox,我没有看到这种行为。

从我的经验设置大小从网络驱动程序并不总是可靠的。 它可能只应用于视口,也可能会遇到其他问题(比如特定网络驱动程序的最小屏幕大小)。

参见 https://w3c.github.io/webdriver/#dfn-set-window-rect

该规范并不保证结果窗口大小与请求的窗口大小完全匹配。特别是实现预计将钳制大于物理屏幕尺寸或小于最小窗口大小的值。

我将尝试设置功能,看看它是否更好。