Selenium Webdriver能在后台默默打开浏览器窗口吗?

我有一个运行很多testing的seleniumtesting套件,在每个新的testing中,它会打开我打开的任何其他窗口之上的浏览器窗口。 在当地环境中工作时非常刺耳。 任何方式来告诉selenium或操作系统(MAC)在后台打开窗户?

有几种方法,但它不是一个简单的“设置configuration值”。 除非你投资了一个不适合每个人的要求的无头浏览器,否则这是一个小问题:

如何隐藏Firefox窗口(Selenium WebDriver)?

Selenium RC中可以隐藏浏览器吗?

你可以'按理说',将一些parameter passing给Chrome,特别是:– --no-startup-window

请注意,对于某些浏览器,尤其是IE浏览器,它会伤害你的testing没有运行在焦点。

你也可以用AutoIT破解一下,一旦打开就隐藏窗口。

如果您使用Python的Seleniumnetworking驱动程序,您可以使用PyVirtualDisplay,Xvfb和Xephyr的Python包装。

PyVirtualDisplay需要Xvfb作为依赖。 在Ubuntu上,首先安装Xvfb:

 sudo apt-get install xvfb 

然后从Pypi安装PyVirtualDisplay:

 pip install pyvirtualdisplay 

在PyWirtualDisplay的无头模式下在Python中示例Selenium脚本:

 #!/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现在已经有了一个完全无头版本,不需要使用任何第三方库来隐藏UI窗口。 示例代码如下所示:

 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() 

Chrome 57有一个选项来传递–headless标志,这使窗口不可见。

这个标志不同于–no-startup-window,因为最后一个不会启动一个窗口。 它用于托pipe后台应用程序,正如本页所述 。

将代码传递给Selenium webdriver(ChromeDriver)的Java代码:

 ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); ChromeDriver chromeDriver = new ChromeDriver(options); 

我build议使用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的path可能会有所不同…随你喜欢而改变:)

就是这样,它为我工作。 他肯定会为你工作,干杯

在Windows上,你可以使用win32gui:

 import win32gui 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, 6) win32gui.ShowWindow(self.hwnd, 0) def show(self): win32gui.ShowWindow(self.hwnd, 5) win32gui.ShowWindow(self.hwnd, 3) 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() 

然而,这个解决scheme有一个问题 – 使用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+"';") 

在* nix上,您也可以像Xvfb一样运行一个无头X服务器,并将DISPLAYvariables指向它:

假的X服务器进行testing?

这是一个为我工作的.net解决scheme:

在这里下载PhantomJs http://phantomjs.org/download.html

从下载的bin文件夹复制.exe文件并粘贴到Visual Studio项目的bin debug / release文件夹中。

添加这个使用

 using OpenQA.Selenium.PhantomJS; 

在你的代码中打开这样的驱动程序:

 PhantomJSDriver driver = new PhantomJSDriver(); using (driver) { driver.Navigate().GoToUrl("http://testing-ground.scraping.pro/login"); //your code here } 
Interesting Posts