多くのテストを実行するセレンテストスイートがあり、新しいテストを実行するたびに、開いている他のウィンドウの上にブラウザウィンドウが開かれます。ローカル環境での作業中は非常に不快です。ウィンドウをバックグラウンドで開くようにセレンまたはOS(MAC)に指示する方法はありますか?
多くのテストを実行するセレンテストスイートがあり、新しいテストを実行するたびに、開いている他のウィンドウの上にブラウザウィンドウが開かれます。ローカル環境での作業中は非常に不快です。ウィンドウをバックグラウンドで開くようにセレンまたはOS(MAC)に指示する方法はありますか?
回答:
いくつかの方法がありますが、それは単純な「構成値の設定」ではありません。すべての人の要件に合わないヘッドレスブラウザに投資しない限り、これは少しハックです。
Firefoxウィンドウ(Selenium WebDriver)を非表示にする方法は?
そして
Selenium RCでブラウザーを非表示にすることはできますか?
「想定通り」に、いくつかのパラメータをChromeに渡すことができます。具体的には次のとおりです。 --no-startup-window
一部のブラウザ、特にIEの場合、テストをフォーカスしないとテストに悪影響を与えることに注意してください。
AutoITで少しハックして、ウィンドウを開いたら非表示にすることもできます。
PythonでSelenium Webドライバーを使用している場合は、XvfbおよびXephyrのPythonラッパーであるPyVirtualDisplayを使用できます。
PyVirtualDisplayは依存関係としてXvfbを必要とします。Ubuntuでは、まずXvfbをインストールします。
sudo apt-get install xvfb
次に、PypiからPyVirtualDisplayをインストールします。
pip install pyvirtualdisplay
PyVirtualDisplayを使用したヘッドレスモードでの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とは異なります。このページにあるように、バックグラウンドアプリをホストするために使用されます。
フラグをSelenium Webdriver(ChromeDriver)に渡すJavaコード:
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);
ブラウザなしで実行する場合は、ヘッドレスモードで実行できます。
今私のために働いているPythonの1つの例を示します
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にも、このことに関する情報が少し追加されています。
Chrome 57以降、頭のない議論があります。
var options = new ChromeOptions();
options.AddArguments("headless");
using (IWebDriver driver = new ChromeDriver(options))
{
// the rest of your test
}
Chromeのヘッドレスモードは、UIバージョンよりも30.97%優れています。他のヘッドレスドライバーPhantomJSは、Chromeのヘッドレスモードよりも34.92%優れています。
PhantomJSDriver
using (IWebDriver driver = new PhantomJSDriver())
{
// the rest of your test
}
Mozilla Firefoxのヘッドレスモードのパフォーマンスは、UIバージョンより3.68%優れています。Chromeのヘッドレスモードは、UIのヘッドレスモードよりも30%以上長い時間を達成するため、これはがっかりです。他のヘッドレスドライバーPhantomJSは、Chromeのヘッドレスモードよりも34.92%優れています。驚いたことに、私にとってEdgeブラウザーはそれらすべてに勝っています。
var options = new FirefoxOptions();
options.AddArguments("--headless");
{
// the rest of your test
}
これはFirefox 57以降で利用可能です
Mozilla Firefoxのヘッドレスモードのパフォーマンスは、UIバージョンより3.68%優れています。Chromeのヘッドレスモードは、UIのヘッドレスモードよりも30%以上長い時間を達成するため、これはがっかりです。他のヘッドレスドライバーPhantomJSは、Chromeのヘッドレスモードよりも34.92%優れています。驚いたことに、私にとってEdgeブラウザーはそれらすべてに勝っています。
注:PhantomJSはもうメンテナンスされていません!
Phantom Jsを使用して、Phantom Official Websiteにアクセスするために必要な詳細情報を入手することをお勧めします
私の知る限り、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へのパスは異なる場合があります...好きなように変更してください:)
それだけです、私にとってはうまくいきました。そして間違いなく彼はあなたのために働きます、乾杯
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()
ただし、このソリューションには1つの問題があります。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+"';")
私はこのコードをWindowsのFirefoxに使用して答えを得ました:(ここを参照)
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
Options = Options()
Options.headless = True
Driver = webdriver.Firefox(options=Options, executable_path='geckodriver.exe')
Driver.get(...)
...
ただし、他のブラウザではテストしていません。
これは、Seleniumの新しいバージョン4.x(おそらく3.x)で機能する単純なNodeJSソリューションです。
クロム:
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')
すべてがバックグラウンドで実行されます。まさに私たちが欲しいものです。
Chromeドライバーを使用している場合は、次の非常にシンプルなコードを使用できます(私にとってはうまくいきました)。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome('chromedriver2_win32/chromedriver.exe', options=chrome_options)
driver.get('https://www.anywebsite.com')
* nixでは、XvfbのようなヘッドレスXサーバーを実行して、それにDISPLAY変数をポイントすることもできます。
これは私のために働いた.netソリューションです:
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
}
Ubuntu(Gnome)を使用している場合、1つの簡単な回避策は、Gnome拡張auto-move-windowをインストールすることです:https : //extensions.gnome.org/extension/16/auto-move-windows/
次に、ブラウザ(Chromeなど)を別のワークスペース(Workspace 2など)に設定します。ブラウザは他のワークスペースで静かに実行され、もう邪魔されることはありません。作業を中断することなく、引き続きChromeをワークスペースで使用できます。
これを実現する1つの方法は、ブラウザをヘッドレスモードで実行することです。これのもう1つの利点は、テストがより速く実行されることです。
Chromeブラウザでヘッドレスモードを設定するには、以下のコードを見つけてください。
package chrome;
public class HeadlessTesting {
public static void main(String[] args) throws IOException{
System.setProperty("webdriver.chrome.driver",
"ChromeDriverPath");
ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
options.addArguments("window-size=1200x600");
WebDriver driver = new ChromeDriver(options);
driver.get("https://contentstack.built.io");
driver.get("https://www.google.co.in/");
System.out.println("title is: " + driver.getTitle());
File scrFile = ((TakesScreenshot) driver)
.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("pathTOSaveFile"));
driver.quit();
}
}
driver = webdriver.Firefox()
、あなたのコードでは、ここに私の答えは次のとおりstackoverflow.com/a/23898148/1515819を