У меня есть набор тестов selenium, который запускает много тестов, и при каждом новом тесте он открывает окно браузера поверх любых других окон, которые я открываю. Очень неудобно работать в локальной среде. Любой способ сказать селену или ОС (MAC) открыть окна в фоновом режиме?
Может ли Selenium Webdriver открывать окна браузера в фоновом режиме?
Ответ 1
Существует несколько способов, но это не просто "установить значение конфигурации". Если вы не инвестируете в безмозглый браузер, который не соответствует всем требованиям, это немного взломает:
Как скрыть окно Firefox (Selenium WebDriver)?
и
Можно ли скрыть браузер в Selenium RC?
Вы можете "предположительно", передать некоторые параметры в Chrome, в частности: --no-startup-window
Обратите внимание, что для некоторых браузеров, особенно для IE, это повредит вашим тестам, чтобы они не работали в фокусе.
Вы также можете немного взломать AutoIT, чтобы скрыть окно после его открытия.
Ответ 2
Если вы используете веб-драйвер Selenium с Python, вы можете использовать PyVirtualDisplay, оболочку Python для Xvfb и Xephyr.
PyVirtualDisplay нуждается в Xvfb в качестве зависимости. На Ubuntu сначала установите Xvfb:
sudo apt-get install xvfb
затем установите PyVirtualDisplay из Pypi:
pip install pyvirtualdisplay
Пример Selenium script в Python в режиме без звука с PyVirtualDisplay:
#!/usr/bin/env python
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()
display.stop()
ИЗМЕНИТЬ Первоначальный ответ был опубликован в 2014 году, и теперь мы находимся на пороге 2018 года. Как и все остальное, браузеры также продвинулись. Chrome теперь имеет совершенно безголовую версию, которая устраняет необходимость использования каких-либо сторонних библиотек для скрытия окна пользовательского интерфейса. Пример кода выглядит следующим образом:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
CHROME_PATH = '/usr/bin/google-chrome'
CHROMEDRIVER_PATH = '/usr/bin/chromedriver'
WINDOW_SIZE = "1920,1080"
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE)
chrome_options.binary_location = CHROME_PATH
driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH,
chrome_options=chrome_options
)
driver.get("https://www.google.com")
driver.get_screenshot_as_file("capture.png")
driver.close()
Ответ 3
Chrome 57 имеет возможность пропускать флаг --headless, что делает окно невидимым.
Этот флаг отличается от -no-startup-window, поскольку последний не запускает окно. Он используется для размещения фоновых приложений, как говорится в на этой странице.
Java-код для передачи флага в Selenium webdriver (ChromeDriver):
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);
Ответ 4
Начиная с Chrome 57 у вас есть аргумент без головы:
var options = new ChromeOptions();
options.AddArguments("headless");
using (IWebDriver driver = new ChromeDriver(options))
{
// the rest of your test
}
Безголовый режим Chrome работает на 30,97% лучше, чем версия пользовательского интерфейса. Другой безголовый драйвер PhantomJS поставляет на 34,92% лучше, чем режим Chrome без наушников.
PhantomJSDriver
using (IWebDriver driver = new PhantomJSDriver())
{
// the rest of your test
}
Безголовый режим Mozilla Firefox работает на 3,68% лучше, чем версия пользовательского интерфейса. Это разочарование, так как режим Chrome headless достигает> на 30% лучшего времени, чем пользовательский интерфейс. Другой безголовый драйвер PhantomJS поставляет на 34,92% лучше, чем режим Chrome без наушников. Удивительно для меня, браузер Edge бьет их всех.
var options = new FirefoxOptions();
options.AddArguments("--headless");
{
// the rest of your test
}
Это доступно в Firefox 57+
Безголовый режим Mozilla Firefox работает на 3,68% лучше, чем версия пользовательского интерфейса. Это разочарование, так как режим Chrome headless достигает> на 30% лучшего времени, чем пользовательский интерфейс. Другой безголовый драйвер PhantomJS поставляет на 34,92% лучше, чем режим Chrome без наушников. Удивительно для меня, браузер Edge бьет их всех.
Примечание: PhantomJS больше не поддерживается!
Ответ 5
Для запуска без какого-либо браузера вы можете запустить его в автономном режиме.
Я покажу вам один пример в Python, который работает на меня прямо сейчас
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("headless")
self.driver = webdriver.Chrome(executable_path='/Users/${userName}/Drivers/chromedriver', chrome_options=options)
Я также добавлю вам немного больше информации об этом на официальном сайте Google https://developers.google.com/web/updates/2017/04/headless-chrome.
Ответ 6
Я предлагаю использовать Phantom Js для получения дополнительной информации вам нужно посетить Phantom Официальный сайт
Насколько я знаю, PhantomJS работает только с Firefox..
после загрузки PhantomJs.exe вам нужно импортировать в свой проект, как вы можете видеть на картинке ниже. Phantomjs находится внутри общей → Библиотеки → phantomjs.exe
Теперь все, что вам нужно в коде Selenium, это изменить строку
browser = webdriver.Firefox()
Чтобы что-то вроде
import os
path2phantom = os.getcwd() + "\common\Library\phantomjs.exe"
browser = webdriver.PhantomJS(path2phantom)
Путь к phantomjs может быть другим... измените, как вам нравится:)
Что это, это сработало для меня. и определенно он будет работать для вас, Cheers
Ответ 7
В Windows вы можете использовать win32gui:
import win32gui
import win32con
import subprocess
class HideFox:
def __init__(self, exe='firefox.exe'):
self.exe = exe
self.get_hwnd()
def get_hwnd(self):
win_name = get_win_name(self.exe)
self.hwnd = win32gui.FindWindow(0,win_name)
def hide(self):
win32gui.ShowWindow(self.hwnd, win32con.SW_MINIMIZE)
win32gui.ShowWindow(self.hwnd, win32con.SW_HIDE)
def show(self):
win32gui.ShowWindow(self.hwnd, win32con.SW_SHOW)
win32gui.ShowWindow(self.hwnd, win32con.SW_MAXIMIZE)
def get_win_name(exe):
'''simple function that gets the window name of the process with the given name'''
info = subprocess.STARTUPINFO()
info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
raw=subprocess.check_output('tasklist /v /fo csv', startupinfo=info).split('\n')[1:-1]
for proc in raw:
try:
proc=eval('['+proc+']')
if proc[0]==exe:
return proc[8]
except:
pass
raise ValueError('Could not find a process with name '+exe)
Пример:
hider=HideFox('firefox.exe') #can be anything, eq: phantomjs.exe, notepad.exe ...
#To hide the window
hider.hide()
#To show again
hider.show()
Однако в этом решении есть одна проблема - при использовании метода send_keys окно появляется. Вы можете справиться с этим, используя JavaScript, который не отображает окно:
def send_keys_without_opening_window(id_of_the_element, keys)
YourWebdriver.execute_script("document.getElementById('" +id_of_the_element+"').value = '"+keys+"';")
Ответ 8
Это может быть в настройках. Вот идентичный код Java.
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setHeadless(true);
WebDriver driver = new ChromeDriver(chromeOptions);
Ответ 9
В * nix вы также можете запустить безголовый X-сервер, такой как Xvfb, и указать для него переменную DISPLAY:
Ответ 10
Вот решение .net, которое сработало для меня:
Загрузите PhantomJs здесь http://phantomjs.org/download.html
Скопируйте файл .exe из папки bin при загрузке и вставке в папку bin debug/release в проекте Visual Studio.
Добавьте это, используя
using OpenQA.Selenium.PhantomJS;
В вашем коде откройте драйвер следующим образом:
PhantomJSDriver driver = new PhantomJSDriver();
using (driver)
{
driver.Navigate().GoToUrl("http://testing-ground.scraping.pro/login");
//your code here
}
Ответ 11
options = Options()
options.headless = True
driver = webdriver.Chrome(driverPath, chrome_options=options)
Ответ 12
Если вы используете Ubuntu (Gnome), одним из простых обходных путей является установка окна автоматического перемещения расширения Gnome: https://extensions.gnome.org/extension/16/auto-move-windows/
Затем установите браузер (например, Chrome) на другое рабочее пространство (например, рабочее пространство 2). Браузер будет тихо работать в другом рабочем пространстве и больше не беспокоить вас. Вы по-прежнему можете использовать Chrome в своем рабочем пространстве без перерыва.
Ответ 13
Привет, у меня была та же проблема с моим хроматографическим драйвером, использующим python, и options.add_argument ("headless") не работал для меня, но потом я понял, как это исправить, поэтому я привел его в код ниже
opt=webdriver.ChromeOptions()
opt.arguments.append("headless")
Я надеюсь, что это работает для вас.
Ответ 14
Это простое решение NodeJS, которое работает в новой версии Sexium 4.x (возможно, также 3.x).
Chrome:
const { Builder } = require('selenium-webdriver')
const chrome = require('selenium-webdriver/chrome');
let driver = await new Builder().forBrowser('chrome').setChromeOptions(new chrome.Options().headless()).build()
await driver.get('https://example.com')
Firefox:
const { Builder } = require('selenium-webdriver')
const firefox = require('selenium-webdriver/firefox');
let driver = await new Builder().forBrowser('firefox').setFirefoxOptions(new firefox.Options().headless()).build()
await driver.get('https://example.com')
Все это просто работает в фоновом режиме. Именно то, что мы хотим.