Ich habe eine Selen-Test-Suite, die viele Tests ausführt und bei jedem neuen Test öffnet sie ein Browser-Fenster über anderen Fenstern, die ich geöffnet habe. Sehr störend bei der Arbeit in einer lokalen Umgebung. Irgendeine Möglichkeit, Selen oder das Betriebssystem (MAC) zu sagen, die Fenster im Hintergrund zu öffnen?Kann Selenium Webdriver Browserfenster still im Hintergrund öffnen?
Antwort
Es gibt ein paar Möglichkeiten, aber es ist nicht einfach "setzen Sie einen Konfigurationswert". Sofern Sie in einem Headless Browser investieren, die alle Anforderungen nicht entspricht, ist es ein bisschen wie ein Hack:
How to hide Firefox window (Selenium WebDriver)?
und
Is it possible to hide the browser in Selenium RC?
Sie können 'angeblich', Übergeben Sie einige Parameter in Chrome, speziell: --no-startup-window
Beachten Sie, dass für einige Browser, vor allem IE, es Ihre Tests verletzt, um es nicht im Fokus zu haben.
Sie können auch etwas mit AutoIT hacken, um das Fenster zu verbergen, sobald es geöffnet ist.
" --no-Startup-Fenster "ist jetzt veraltet –
Unter Windows können Sie verwenden 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)
Beispiel:
hider=HideFox('firefox.exe') #can be anything, eq: phantomjs.exe, notepad.exe ...
#To hide the window
hider.hide()
#To show again
hider.show()
Es gibt jedoch ein Problem mit dieser Lösung - send_keys Methode macht das Fenster zeigen sich mit. Sie können mit Hilfe von JavaScript damit umgehen, die nicht Fenster nicht zeigen:
def send_keys_without_opening_window(id_of_the_element, keys)
YourWebdriver.execute_script("document.getElementById('" +id_of_the_element+"').value = '"+keys+"';")
auf * nix, können Sie auch eine Maden X-Server wie Xvfb laufen und die Variable DISPLAY darauf zeigen:
Wenn Sie den Selenium-Webtreiber mit Python verwenden, können Sie PyVirtualDisplay verwenden, einen Python-Wrapper für Xvfb und Xephyr.
PyVirtualDisplay benötigt Xvfb als Abhängigkeit. Unter Ubuntu erste Xvfb installieren:
sudo apt-get install xvfb
dann PyVirtualDisplay von PyPI installieren:
pip install pyvirtualdisplay
Beispiel Selen Skript in Python in einem Headless Modus mit 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()
EDIT Die erste Antwort wurde im Jahr 2014 veröffentlicht und jetzt sind wir an der Schwelle von 2018.Wie alles andere haben Browser auch fortgeschritten. Chrome verfügt jetzt über eine vollständig kopflose Version, sodass keine Bibliotheken von Drittanbietern mehr benötigt werden, um das UI-Fenster zu verbergen.Beispielcode ist wie folgt:
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()
Eine schöne, saubere Lösung. Dank dafür. Klappt wunderbar. Verdient mehr + 1s – Eldamir
Ist es für Mac OSX verfügbar? – vanguard69
Das ist großartig, wenn Sie Ubuntu verwenden und Ihre Testsuite in Python ist. – kevzettler
Ich schlage vor, mit Phantom Js für weitere Informationen Sie Phantom Official Website
Was besuchen müssen, wie ich weiß, PhantomJS arbeiten nur mit Firefox ..
nach dem Download PhantomJs.exe müssen Sie in Ihr Projekt importieren, wie Sie in der Abbildung sehen können Phantomjs ist innerhalb gemeinsamen >>Libra ry >>phantomjs.exe
Jetzt alles, was Sie in Ihrem Selenium Code haben, ist die Linie
browser = webdriver.Firefox()
Um so etwas wie
import os
path2phantom = os.getcwd() + "\common\Library\phantomjs.exe"
browser = webdriver.PhantomJS(path2phantom)
Der Pfad zu ändern zu Phantomjs kann anders sein ... ändern, wie Sie möchten :)
Das war es, es funktionierte für mich. und auf jeden Fall wird er für Sie arbeitet zu, Prost
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile des antworten Sie hier und geben Sie den Link als Referenz an. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – slfan
Hier ist eine .net-Lösung, die für mich gearbeitet:
herunterladen PhantomJS hier http://phantomjs.org/download.html
Kopieren Sie die EXE aus dem Ordner ist im Download und Paste im Ordner debug/release des Visual Studio-Projekts.
Fügen Sie diese mit
using OpenQA.Selenium.PhantomJS;
In Ihrem Code den Fahrer wie folgt geöffnet:
PhantomJSDriver driver = new PhantomJSDriver();
using (driver)
{
driver.Navigate().GoToUrl("http://testing-ground.scraping.pro/login");
//your code here
}
Chrome 57 hat eine Option, die --headless Flagge passieren, die das Fenster unsichtbar macht.
Dieses Flag unterscheidet sich vom --no-Startup-Fenster, da das letzte kein Fenster startet. Es wird verwendet, um Hintergrund-Apps zu hosten, wie this page sagt.
Java-Code unter der Flagge zu Selenium WebDriver (ChromeDriver) weitergeben müssen:
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);
Wissen Sie, ob es möglich ist, dasselbe in VBA-Sprache zu tun? – Martin
@Martin Ich weiß nicht, ob Ihr Problem bereits behoben wurde oder nicht, aber nach einer schnellen Suche fand ich diese: https://github.com/prajaktamoghe/selenium-vba/issues/33 https: // stackoverflow .com/fragen/45121955/how-can-i-use-chrome-options-in-vba-with-selen Hilft Ihnen das? – in016hoe
Für läuft ohne Browser, können Sie es in kopflos Modus laufen kann.
zeige ich Ihnen ein Beispiel in Python, die jetzt für mich arbeitet
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("headless")
self.driver = webdriver.Chrome(executable_path='/Users/${userName}/Drivers/chromedriver', chrome_options=options)
ich auch fügen Sie ein bisschen mehr Informationen zu dieser in der offiziellen Google-Website https://developers.google.com/web/updates/2017/04/headless-chrome
- 1. Mit execute_async_script im Selenium WebDriver
- 2. Java PDF-Datei im neuen Browserfenster öffnen
- 3. Jenkins rennen Selenium Tests im Hintergrund
- 4. Selenium WebDriver on IE11
- 5. Kann Selenium WebDriver nicht an TinyMCE senden
- 6. Selenium-Webdriver-Skript kann Seitenladung nicht erkennen
- 7. Selenium-Webdriver auf Ruby 1.8.7
- 8. Mit Selenium WebDriver
- 9. Selenium webdriver und Unicode
- 10. TeamCity und Selenium WebDriver
- 11. JUnit (Selenium WebDriver) zu öffnen www.google.co.uk in Chrome Browser
- 12. RSpec Fehler Selenium-Webdriver
- 13. Blättern mit Selenium Webdriver
- 14. Selenium webdriver (javascript) tab
- 15. Selen im Hintergrund verwenden
- 16. Selenium schließt Browserfenster nicht mit Protokoll
- 17. Erzwinge das Speichern aller Dateien - nicht im Browserfenster öffnen
- 18. Wie ändere ich das aktuelle Browserfenster in Selenium WebDriver mit Java?
- 19. Selenium Webdriver IE konnte Element
- 20. Selenium Webdriver - Element nicht sichtbar
- 21. Selenium Webdriver submit() vs click()
- 22. Selenium Webdriver (VBA): Explizites Warten
- 23. Selenium WebDriver Von Facebook ausloggen
- 24. Selenium WebDriver: Handhabung von DropDowns
- 25. Selenium Webdriver Cassing Problem C#
- 26. Selenium WebDriver JS - Explizit Warten
- 27. Selenium WebDriver - Facebook Beitrag Problem
- 28. Selenium WebDriver - Iteration durch Tabellenzeilen
- 29. NoClassDefFoundError mit Selenium Chrome WebDriver
- 30. Selenium webdriver nicht öffnen URL statt nur eine leere Seite öffnen
Wenn Sie tun ' Treiber = Webtreiber.Firefox() 'in Ihrem Code, folgen Sie meiner Antwort hier: http://Stackoverflow.com/a/23898148/1515819 –