क्या सेलेनियम वेबड्राइवर ब्राउज़र विंडो को चुपचाप पृष्ठभूमि में खोल सकता है?


161

मेरे पास एक सेलेनियम परीक्षण सूट है जो कई परीक्षण चलाता है और प्रत्येक नए परीक्षण पर यह मेरे द्वारा खोली गई किसी भी अन्य विंडो के शीर्ष पर एक ब्राउज़र विंडो खोलता है। स्थानीय परिवेश में काम करते हुए बहुत परेशान होना। पृष्ठभूमि में खिड़कियां खोलने के लिए सेलेनियम या ओएस (मैक) बताने का कोई तरीका?


यदि आप driver = webdriver.Firefox() अपने कोड में कर रहे हैं , तो यहां मेरे उत्तर का पालन करें: stackoverflow.com/a/23898148/1515819
स्टीफन ब्रुकर्ट

@ StéphaneBruckert क्या क्रोम के लिए ऐसा कुछ है?
ई। प्रणीत

stackoverflow.com/a/48775203/1207193 काम कर रहा समाधान 2020 GoogleChrome Windows
eusoubrasileiro

जवाबों:


64

कुछ तरीके हैं, लेकिन यह एक सरल "कॉन्फ़िगरेशन मान सेट नहीं है"। जब तक आप एक बिना सिर वाले ब्राउज़र में निवेश नहीं करते हैं, जो हर किसी की आवश्यकताओं के अनुरूप नहीं होता है, यह एक छोटा सा हैक है:

फ़ायरफ़ॉक्स विंडो (सेलेनियम वेबड्राइवर) को कैसे छिपाएं?

तथा

क्या सेलेनियम आरसी में ब्राउज़र को छिपाना संभव है?

आप 'माना' कर सकते हैं, क्रोम में कुछ मापदंडों को पारित करते हैं, विशेष रूप से: --no-startup-window

ध्यान दें कि कुछ ब्राउज़रों के लिए, विशेष रूप से IE, यह आपके परीक्षणों पर ध्यान केंद्रित नहीं करने के लिए प्रभावित करेगा।

विंडो खुलने के बाद विंडो को छुपाने के लिए आप ऑटोट के साथ थोड़ा सा भी हैक कर सकते हैं।


8
"- नहीं-स्टार्टअप-विंडो" अब पदावनत है
कोरी गोल्डबर्ग

2
वास्तव में, "-हिन-स्टार्टअप-विंडो" के बजाय "- हेडलेस" का उपयोग करें, मैंने पुष्टि की है कि यह मैक और क्रोम v80 पर काम करता है
लोडरॉन

178

यदि आप Python के साथ सेलेनियम वेब ड्राइवर का उपयोग कर रहे हैं, तो आप PyVirtualDisplay, Xvfb और Xephyr के लिए पायथन आवरण का उपयोग कर सकते हैं।

PyVirtualDisplay को निर्भरता के रूप में Xvfb की आवश्यकता है। उबंटू पर, पहले Xvfb स्थापित करें:

sudo apt-get install xvfb

फिर Pypi से PyVirtualDisplay स्थापित करें:

pip install pyvirtualdisplay

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 का प्रारंभिक उत्तर 2014 में पोस्ट किया गया था और अब हम 2018 में सबसे आगे हैं। बाकी सब कुछ, ब्राउज़र भी उन्नत हो चुके हैं। क्रोम में अब पूरी तरह से बिना सिर वाला संस्करण है जो 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()

एक सुंदर, स्वच्छ समाधान। उसके लिए धन्यवाद। एक जादू की तरह काम करता है। अधिक + 1s का
वर्णन किया

9
क्या यह मैक ओएसएक्स के लिए उपलब्ध है?
वंगार्द

यह बहुत अच्छा है यदि आप उबंटू का उपयोग कर रहे हैं और आपका टेस्ट सूट पायथन में है
केवज़टेलर


1
chrome_options का उपयोग पदावनत किया जाता है, अब सिर्फ विकल्प है
Mojimi

40

क्रोम 57 में - हेडलेस फ्लैग पास करने का विकल्प है, जो विंडो को अदृश्य बनाता है।

यह ध्वज -नो-स्टार्टअप-विंडो से भिन्न है क्योंकि अंतिम में विंडो लॉन्च नहीं होती है। यह पृष्ठ के रूप में पृष्ठभूमि एप्लिकेशन की मेजबानी के लिए उपयोग किया जाता है कहता है।

सेलेनियम वेबड्राइवर (क्रोमड्राइवर) को ध्वज पारित करने के लिए जावा कोड:

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

क्या आप जानते हैं कि क्या VBA भाषा में भी ऐसा करना संभव है?
मार्टिन

@Martin मैं नहीं जानता कि क्या आपकी समस्या पहले से ही तय किया गया है या नहीं, लेकिन एक त्वरित खोज के बाद मैं उन पाया: github.com/prajaktamoghe/selenium-vba/issues/33 stackoverflow.com/questions/45121955/... इस करता है आपकी मदद?
Marlies

19

बिना किसी ब्राउज़र के चलने के लिए, आप इसे बिना सिर के चला सकते हैं मोड ।

मैं आपको पायथन में एक उदाहरण दिखाता हूं जो अभी मेरे लिए काम कर रहा है

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 में इस बारे में थोड़ी और जानकारी जोड़ता हूं


सब से सरल उत्तर!
MarcioPorto

जून 2020 तक बहुत आसानी से काम किया
जॉनी बॉय

15

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 क्रोम के हेडलेस मोड से 34.92% बेहतर है।

PhantomJSDriver

using (IWebDriver driver = new PhantomJSDriver())
{
     // the rest of your test
}

मोज़िला फ़ायरफ़ॉक्स का हेडलेस मोड यूआई संस्करण की तुलना में 3.68% बेहतर प्रदर्शन करता है। क्रोम के हेडलेस मोड के यूआई के मुकाबले 30% बेहतर समय प्राप्त करने के बाद से यह एक निराशा है। अन्य हेडलेस ड्राइवर PhantomJS क्रोम के हेडलेस मोड से 34.92% बेहतर है। मेरे लिए हैरानी की बात यह है कि एज ब्राउजर ने इन सभी को पछाड़ दिया।

var options = new FirefoxOptions();
options.AddArguments("--headless");
{
    // the rest of your test
}

यह फ़ायरफ़ॉक्स 57+ से उपलब्ध है

मोज़िला फ़ायरफ़ॉक्स का हेडलेस मोड यूआई संस्करण की तुलना में 3.68% बेहतर प्रदर्शन करता है। क्रोम के हेडलेस मोड के यूआई के मुकाबले 30% बेहतर समय प्राप्त करने के बाद से यह एक निराशा है। अन्य हेडलेस ड्राइवर PhantomJS क्रोम के हेडलेस मोड से 34.92% बेहतर है। मेरे लिए हैरानी की बात यह है कि एज ब्राउजर ने इन सभी को पछाड़ दिया।

नोट: PhantomJS किसी भी अधिक बनाए रखा नहीं है!


8

मेरा सुझाव है कि अधिक जानकारी के लिए आप प्रेत आधिकारिक वेबसाइट पर जाने के लिए प्रेत Js का उपयोग करें

जहाँ तक मुझे पता है कि PhantomJS केवल फ़ायरफ़ॉक्स के साथ काम करते हैं ..

PhantomJs.exe डाउनलोड करने के बाद आपको अपनी परियोजना को आयात करने की आवश्यकता है जैसा कि आप नीचे दी गई तस्वीर में देख सकते हैं कि Phantomjs आम के अंदर है >> पुस्तकालय >> phantomjs.exe यहां छवि विवरण दर्ज करें

अब आपको अपने सेलेनियम कोड के अंदर लाइन को बदलना है

browser = webdriver.Firefox()

जैसा कुछ करना है

import os
path2phantom = os.getcwd() + "\common\Library\phantomjs.exe"
browser = webdriver.PhantomJS(path2phantom)

फ़ैंटमज का रास्ता अलग हो सकता है ... जैसे चाहें बदलाव करें :)

यही है, इसने मेरे लिए काम किया। और निश्चित रूप से वह आपके लिए, चीयर्स के लिए काम करेगा


हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। केवल-लिंक जवाब अमान्य हो सकता है अगर लिंक किए गए पृष्ठ परिवर्तन
slfan

7

खिड़कियों पर आप 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 विधि का उपयोग करने से खिड़की दिखाई देती है। आप जावास्क्रिप्ट का उपयोग करके इससे निपट सकते हैं जो खिड़की नहीं दिखाता है:

def send_keys_without_opening_window(id_of_the_element, keys)
    YourWebdriver.execute_script("document.getElementById('" +id_of_the_element+"').value = '"+keys+"';")

5

मैंने विंडोज में फ़ायरफ़ॉक्स के लिए इस कोड का उपयोग किया और उत्तर मिला: (संदर्भ यहाँ )

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

लेकिन मैं अन्य ब्राउज़रों के लिए इसका परीक्षण नहीं करता।


प्रश्न पहले से ही उत्तर दिया गया है और लेखक ने पहले ही उत्तर को मंजूरी दे दी है।
सरिक शेख

4
मैंने अन्य लोगों के लिए उत्तर दिया कि इस पोस्ट को देखेंगे
NaabNuts

1
हमें फ़ायरफ़ॉक्स विकल्प देने के लिए धन्यवाद
TimDC

आपका स्वागत है। यदि आपके पास सेलेनियम और Django के बारे में कोई प्रश्न है तो मैं आपको उत्तर दूंगा।
नौबत

क्रोम में भी काम करता है!
हाइजेनबर्ग

3

यह विकल्पों में हो सकता है। यहाँ समान जावा कोड है।

        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setHeadless(true);
        WebDriver driver = new ChromeDriver(chromeOptions);

1

यह एक सरल NodeJS समाधान है जो सेलेनियम के नए संस्करण 4.x (शायद 3.x) में भी काम करता है।

क्रोम:

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

फ़ायरफ़ॉक्स:

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

पूरी बात सिर्फ पृष्ठभूमि में चलती है। वास्तव में हम जो चाहते हैं।


1

यदि आप क्रोम ड्राइवर का उपयोग कर रहे हैं, तो आप इस बहुत ही सरल कोड का उपयोग कर सकते हैं: (यह मेरे लिए काम किया है)

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


0

यहाँ एक .net समाधान है कि मेरे लिए काम किया है:

यहां फैंटमज डाउनलोड करें http://phantomjs.org/download.html

डाउनलोड में बिन फ़ोल्डर से .exe कॉपी करें और अपने विज़ुअल स्टूडियो प्रोजेक्ट के बिन डिबग / रिलीज़ फ़ोल्डर में पेस्ट करें।

इस का उपयोग कर जोड़ें

using OpenQA.Selenium.PhantomJS;

अपने कोड में ड्राइवर को इस तरह खोलें:

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

0

यदि आप उबंटू (ग्नोम) का उपयोग कर रहे हैं, तो ग्नोम एक्सटेंशन ऑटो-मूव-विंडो स्थापित करने के लिए एक सरल उपाय है: https://extensions.gnome.org/extension/16/auto-move-windows/

फिर ब्राउजर (उदा। क्रोम) को दूसरे कार्यक्षेत्र (जैसे। कार्यक्षेत्र 2) पर सेट करें। ब्राउज़र चुपचाप अन्य कार्यक्षेत्र में चलेगा और आपको परेशान नहीं करेगा। आप अभी भी अपने कार्यक्षेत्र में क्रोम का उपयोग बिना किसी रुकावट के कर सकते हैं।


0

हाय, मुझे अपने क्रोमड्राइवर के साथ अजगर और विकल्पों का उपयोग करने में एक ही समस्या थी ।ad__argument ("हेडलेस") मेरे लिए काम नहीं करता था, लेकिन फिर मुझे एहसास हुआ कि इसे कैसे ठीक किया जाए इसलिए मैं इसे नीचे दिए गए कोड में लाता हूं

opt=webdriver.ChromeOptions()
opt.arguments.append("headless")

आशा है कि ये आपके काम आएगा।


0

इसे प्राप्त करने का एक तरीका है हेडलेस मोड में ब्राउज़र चलाना। इसका एक और लाभ यह है कि परीक्षणों को तेजी से निष्पादित किया जाता है।

क्रोम ब्राउजर में हेडलेस मोड सेट करने के लिए कृपया नीचे दिया कोड देखें।

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();
        }
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.