Mam zestaw testów selenu, który uruchamia wiele testów i przy każdym nowym teście otwiera okno przeglądarki na górze każdego innego okna, które mam otwarte. Bardzo drażniące podczas pracy w lokalnym środowisku. Jakikolwiek sposób odróżnienia selenu lub systemu operacyjnego (MAC) od otwierania okien w tle?Czy Selenium Webdriver może otwierać po cichu okna przeglądarki?
Odpowiedz
Istnieje kilka sposobów, ale nie jest to proste "ustaw wartość konfiguracji". Chyba, że inwestowanie w bezgłowe przeglądarki, która nie spełnić wymagania każdego z nas, jest to trochę hack:
How to hide Firefox window (Selenium WebDriver)?
i
Is it possible to hide the browser in Selenium RC?
Można „podobno” przekazać pewne parametry do Chrome, w szczególności: --no-startup-window
Należy pamiętać, że w przypadku niektórych przeglądarek, szczególnie IE, testy nie będą działać, aby nie działały.
Możesz również zhakować trochę za pomocą AutoIT, aby ukryć okno po jego otwarciu.
" --no-startup-window "jest teraz przestarzałe –
Z okien można użyć 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)
Przykład:
hider=HideFox('firefox.exe') #can be anything, eq: phantomjs.exe, notepad.exe ...
#To hide the window
hider.hide()
#To show again
hider.show()
Jednak jest jeden problem z tym rozwiązaniem - przy użyciu metody send_keys sprawia, że okno wyświetlane. Można sobie z nim za pomocą JavaScript, które nie pokazuje okno:
def send_keys_without_opening_window(id_of_the_element, keys)
YourWebdriver.execute_script("document.getElementById('" +id_of_the_element+"').value = '"+keys+"';")
W * nix, można również uruchomić bezgłowe X-serwer jak Xvfb i wskazać zmienną DISPLAY do niego:
Jeśli używasz sterownika WWW Selenium z Pythonem, możesz użyć PyVirtualDisplay, opakowania Pythona dla Xvfb i Xephyr.
PyVirtualDisplay potrzebuje Xvfb jako zależności. Na Ubuntu, należy najpierw zainstalować Xvfb:
sudo apt-get install xvfb
następnie zainstalować PyVirtualDisplay z PyPI:
pip install pyvirtualdisplay
Sample selen skrypt w Pythonie w trybie bezgłowe z 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 Początkowa odpowiedź została opublikowana w 2014 roku, a teraz jesteśmy na szczycie 2018 roku. Jak wszystko inne, przeglądarki mają również zaawansowane. Chrome ma teraz całkowicie bezgłową wersję, która eliminuje potrzebę użycia bibliotek innych firm, aby ukryć okno interfejsu użytkownika.Przykładowy kod jest następujący:
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()
Piękne, czyste rozwiązanie. Dziękuję za to. Działa jak marzenie. Zasługiwała więcej + 1s – Eldamir
Czy jest dostępna dla Mac OSX? – vanguard69
To jest świetne, jeśli używasz Ubuntu, a twój pakiet testowy jest w Pythonie – kevzettler
Proponuję za pomocą Phantom Js uzyskać więcej informacji należy odwiedzić Phantom Official Website
O ile wiem PhantomJS pracować tylko z Firefoksem ..
po pobraniu pliku PhantomJs.exe, który należy zaimportować do projektu, jak widać na zdjęciu poniżej Phantomjs znajduje się wewnątrz często >>Waga ry >>phantomjs.exe
Teraz trzeba wewnątrz kodu Selen jest dokonać korekty
browser = webdriver.Firefox()
do czegoś
import os
path2phantom = os.getcwd() + "\common\Library\phantomjs.exe"
browser = webdriver.PhantomJS(path2phantom)
ścieżce do phantomjs może być inny ... Zmień jak tylko chcesz :)
To wszystko, zadziałało dla mnie. i na pewno będzie pracował dla ciebie, Cheers
Podczas gdy ten link może odpowiedzieć na pytanie, lepiej jest dołączyć istotne elementy odpowiedz tutaj i podaj link do referencji. Odpowiedzi dotyczące linków mogą stać się nieważne, jeśli strona z linkami zmieni się – slfan
Oto rozwiązanie .net, który pracował dla mnie:
PhantomJs Wybirz http://phantomjs.org/download.html
Skopiuj .exe z folderu bin w pobierania i pasty w folderze debug/release bin projektu Visual Studio.
Dodaj to za pomocą
using OpenQA.Selenium.PhantomJS;
W kodzie otworzyć sterownik tak:
PhantomJSDriver driver = new PhantomJSDriver();
using (driver)
{
driver.Navigate().GoToUrl("http://testing-ground.scraping.pro/login");
//your code here
}
Chrome 57 ma możliwość zabicia --headless flagę, która sprawia, że okno niewidoczne.
Ta flaga różni się od -no-uruchamiania-okna, ponieważ ostatnia nie uruchamia okna. Jest używany do hostowania aplikacji w tle, jak mówi this page.
kodu Java, aby przejść na flagę Selen webdriver (ChromeDriver):
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);
Czy wiesz, czy można to zrobić w języku VBA? – Martin
@Martin Nie wiem, czy twój problem został już naprawiony czy nie, ale po szybkim wyszukiwaniu znalazłem te: https://github.com/prajaktamoghe/selenium-vba/issues/33 https: // stackoverflow .com/questions/45121955/how-can-i-use-chrome-options-in-vba-with-selen Czy to ci pomoże? – in016hoe
do biegania bez przeglądarki, można go uruchomić w trybiebezgłowy.
pokażę wam jeden przykład w Pythonie, który pracuje dla mnie teraz
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("headless")
self.driver = webdriver.Chrome(executable_path='/Users/${userName}/Drivers/chromedriver', chrome_options=options)
Dodam wam nieco więcej informacji na ten temat na oficjalnej stronie Google https://developers.google.com/web/updates/2017/04/headless-chrome
Jeśli robisz ' driver = webdriver.Firefox() 'w kodzie, wykonaj moją odpowiedź tutaj: http://stackoverflow.com/a/23898148/1515819 –