如何在Selenium WebDriver中设置浏览器的宽度和高度?

110
我正在使用Python的Selenium WebDriver。 我想要用特定的宽度和高度实例化浏览器。到目前为止,我能做到的最接近的是:
driver = webdriver.Firefox()
driver.set_window_size(1080,800)

这个方法可以实现功能,但是它是在创建后设置浏览器大小,而我希望在实例化时就设置好。我猜应该有一种类似以下方式的方法:
profile = webdriver.FirefoxProfile();
profile.set_preference(foo, 1080)
driver = webdriver.Firefox(profile)

但是我不知道foo是什么,也找不到文档在哪里。 问题1:有没有办法在实例化时设置宽度/高度? 问题2:profile.set_preference可用的所有键的参考文档在哪里?

6
它创建后重新调整大小为什么是件坏事? - Arran
2
老实说,我不知道。严格来说,这与在特定大小打开窗口是不同的(我可以看到差异)。我不知道这种差异是否是_实质性的_。既然这些是测试,我想尽可能消除许多未知因素。如果有人告诉我这没有任何影响,那我会很高兴。但他们可能需要了解我的测试具体情况才能做到这一点,而我希望能够为我编写的所有未来测试执行此操作。 - tom
2
我同意Arran的观点。我想不出为什么在创建后调整大小会导致问题。 - Robbie Wareham
10个回答

66

以下是适用于无头和有头模式的解决方案,可以在启动窗口时指定大小而不是在设置完后再进行调整:

Chrome:

from selenium.webdriver import Chrome, ChromeOptions

opts = ChromeOptions()
opts.add_argument("--window-size=2560,1440")

driver = Chrome(options=opts)

火狐浏览器:

from selenium.webdriver import Firefox, FirefoxOptions

opts = FirefoxOptions()
opts.add_argument("--width=2560")
opts.add_argument("--height=1440")

driver = Firefox(options=opts)

11
在 Chrome 中相应的选项是 "--window-size=2560,1440"。 - Mark Raymond
2
这是正确的答案,谢谢。 - Marie M.

53

以下是我使用Selenium 2.48.0在Python中的实现方法:

from selenium.webdriver import Firefox
driver = Firefox()
driver.set_window_position(0, 0)
driver.set_window_size(1024, 768)

2
原帖明确表示他们不想在创建后设置它。问题中的代码已经展示了他们使用“set_window_size”。 - Bryan Oakley
set_window_position(0,0) 将窗口位置设置在屏幕左侧大约10个像素的位置,非常令人不爽。 - user337598

46

对于我来说,在OS X 10.9上,唯一在Java 7中起作用的是这个:

// driver = new RemoteWebDriver(new URL(grid), capability);
driver.manage().window().setPosition(new Point(0,0));
driver.manage().window().setSize(new Dimension(1024,768));

其中1024是宽度,而768是高度。


19

试试这样:

IWebDriver _driver = new FirefoxDriver();
_driver.Manage().Window.Position = new Point(0, 0);
_driver.Manage().Window.Size = new Size(1024, 768);

不确定启动后是否会调整大小,所以也许这不是你想要的


难道不应该是Python吗? - whackamadoodle3000

13

如果您使用的是谷歌浏览器

 chrome_options = Options()
 chrome_options.add_argument("--start-maximized");
 chrome_options.add_argument("--window-position=1367,0");
 if mobile_emulation :
     chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)

  self.driver = webdriver.Chrome('/path/to/chromedriver', 
                                  chrome_options = chrome_options)

这将使浏览器在第二个显示器上启动,而不会在屏幕上产生任何烦人的闪烁或移动。


你知道如何在Firefox中实现同样的技巧吗?也许你可以回答我的问题。我的问题链接 - Mykola Zotko

4
很容易,这是完整的代码。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("Your URL")
driver.set_window_size(480, 320)

确保 Chrome 驱动程序已添加至系统环境变量。

1
此问题要求在实例化驱动程序之前设置大小。 - Jitin
这对我有效。 - arun
这只会在窗口加载后发生。 - Turkeyphant

1

<Chrome>

*-window-sizewindow-size也可以使用:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--window-size=1024,768")
driver = webdriver.Chrome(options=options)

*以下代码也可以根据文档正常运行:
from selenium import webdriver

driver = webdriver.Chrome()
driver.set_window_size(1024, 768)

<Microsoft Edge>

*-window-sizewindow-size也可以使用:

from selenium import webdriver

options = webdriver.EdgeOptions()
options.add_argument("--window-size=1024,768")
driver = webdriver.Edge(options=options)

*以下代码也根据文档正常运行:
from selenium import webdriver

driver = webdriver.Edge()
driver.set_window_size(1024, 768)

<Firefox>

*-width 和 -height 也有效,而 widthheight 无效:

from selenium import webdriver

options = webdriver.FirefoxOptions()
options.add_argument("--window-size=1024,768")
driver = webdriver.Firefox(options=options)

*以下代码也根据文档正常运行:
from selenium import webdriver

driver = webdriver.Firefox()
driver.set_window_size(1024, 768)

1

以下是来自Python Selenium 2.31.0 Firefox_Profile.py的Firefox配置文件默认偏好设置

在Firefox地址栏中输入"about:config"以查看所有偏好设置

有关about:config条目的参考:http://kb.mozillazine.org/About:config_entries

DEFAULT_PREFERENCES = {
    "app.update.auto": "false",
    "app.update.enabled": "false",
    "browser.download.manager.showWhenStarting": "false",
    "browser.EULA.override": "true",
    "browser.EULA.3.accepted": "true",
    "browser.link.open_external": "2",
    "browser.link.open_newwindow": "2",
    "browser.offline": "false",
    "browser.safebrowsing.enabled": "false",
    "browser.search.update": "false",
    "extensions.blocklist.enabled": "false",
    "browser.sessionstore.resume_from_crash": "false",
    "browser.shell.checkDefaultBrowser": "false",
    "browser.tabs.warnOnClose": "false",
    "browser.tabs.warnOnOpen": "false",
    "browser.startup.page": "0",
    "browser.safebrowsing.malware.enabled": "false",
    "startup.homepage_welcome_url": "\"about:blank\"",
    "devtools.errorconsole.enabled": "true",
    "dom.disable_open_during_load": "false",
    "extensions.autoDisableScopes" : 10,
    "extensions.logging.enabled": "true",
    "extensions.update.enabled": "false",
    "extensions.update.notifyUser": "false",
    "network.manage-offline-status": "false",
    "network.http.max-connections-per-server": "10",
    "network.http.phishy-userpass-length": "255",
    "offline-apps.allow_by_default": "true",
    "prompts.tab_modal.enabled": "false",
    "security.fileuri.origin_policy": "3",
    "security.fileuri.strict_origin_policy": "false",
    "security.warn_entering_secure": "false",
    "security.warn_entering_secure.show_once": "false",
    "security.warn_entering_weak": "false",
    "security.warn_entering_weak.show_once": "false",
    "security.warn_leaving_secure": "false",
    "security.warn_leaving_secure.show_once": "false",
    "security.warn_submit_insecure": "false",
    "security.warn_viewing_mixed": "false",
    "security.warn_viewing_mixed.show_once": "false",
    "signon.rememberSignons": "false",
    "toolkit.networkmanager.disable": "true",
    "toolkit.telemetry.enabled": "false",
    "toolkit.telemetry.prompted": "2",
    "toolkit.telemetry.rejected": "true",
    "javascript.options.showInConsole": "true",
    "browser.dom.window.dump.enabled": "true",
    "webdriver_accept_untrusted_certs": "true",
    "webdriver_enable_native_events": "true",
    "webdriver_assume_untrusted_issuer": "true",
    "dom.max_script_run_time": "30",
    }

1
谢谢。我没有在其中看到浏览器大小设置,但是拥有这个列表和链接仍然很有用。 - tom

0
我尝试了下面的代码来设置Mac Chrome和Windows Chrome上的分辨率。
driver.manage().window().setSize(new Dimension(1280, 768));

使用以下代码测试分辨率更改:-
Dimension dimension = driver.manage().window().getSize();
LOGGER.info("dimension is " + dimension);

0
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.window.width',0)
profile.set_preference('browser.window.height',0)
profile.update_preferences()

将此代码编写到测试代码的设置部分,在webdriver.Firefox()行之前。


2
问题是关于使用Python设置初始窗口大小的问题... 无论如何,使用Python也不起作用,至少使用Selenium 2.46.0和Firefox 38.0.5。 - Álvaro Arranz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接